mdedetrich commented on code in PR #371: URL: https://github.com/apache/incubator-pekko/pull/371#discussion_r1230234594
########## actor/src/main/scala/org/apache/pekko/util/UniqueRandomShortProvider.scala: ########## @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * license agreements; and to You under the Apache License, version 2.0: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * This file is part of the Apache Pekko project, derived from Akka. + */ + +package org.apache.pekko.util + +import org.apache.pekko.annotation.InternalApi + +import java.security.SecureRandom + +/** + * An efficient collision free threadsafe generator of pseudo random + * shorts based on https://en.wikipedia.org/wiki/Double_hashing#Enhanced_double_hashing + * using SecureRandom as a seed. + * + * The avoidance of collisions is achieved by using a Short Array buffer + * that is prefilled with a dimension of 65536 (~ 131072 bytes in size per + * instance of [[UniqueRandomShortProvider]]). This means it will loop + * through all possible 65536 values before starting to re-generating + * the same numbers again. + */ + +@InternalApi +private[pekko] class UniqueRandomShortProvider { + import UniqueRandomShortProvider._ + + // These methods are volatile so that they stay within cache + @volatile private var index = 0L Review Comment: So I just spoke with him and he said that he did put volatile there deliberately, its a trick to keep the cache warm (see https://github.com/apache/incubator-pekko/pull/371#discussion_r1228105897). I will do another set of benchmarks without volatile to see if it makes a difference -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
