6

私はAkka2Futuresで構築されたCPUを集中的に使用するアプリケーションを作成しています。現在、アクターは必要ありませんが、使用することに抵抗はありません。

先物で囲まれたいくつかの計算では、非常に頻繁にランダムジェネレーターを呼び出す必要があります。従来の同時RNGを使用すると、それがチョークポイントになり、スケーラビリティが失われるのではないかと心配しています。

スレッドごとにランダムジェネレーターを使用する最も高速で簡単な方法はExecutionContext何ですか?

実験を繰り返すなど、それらすべてを異なるシード(ただし事前にわかっている)で初期化する方法はありますか?

4

3 に答える 3

4

akka.jsr166y.ThreadLocalRandom を使用

于 2012-03-08T01:09:58.773 に答える
4

usingThreadLocalRandomがオプションでない場合は、独自の usingThreadLocalと Scalaを簡単に作成できますRandom。「一般的に使用される追加の有界ランダム生成メソッド」を提供することは、関心のある開発者に任された課題です。

object ThreadLocalRandom {
  private val localRandom = new ThreadLocal[util.Random] {
    override protected def initialValue() = new util.Random
  }

  def current = localRandom.get
}
于 2012-03-07T15:18:40.310 に答える
2

Scala ランダム ジェネレーターを使用しないでください。おそらく同期されていることに気付いたJavaの単なるラッパーです。

Java 7 には、使用するために作成された ThreadLocalRandom があります。Java 7 を使用できない場合は、別のランダマイザーを使用してください。たとえば、ここからの同期されていないメルセナ ツイスターの実装: http://www.cs.gmu.edu/~sean/research/。この実装を ThreadLocal オブジェクトを通じて使用して、各スレッドが 1 回だけ初期化されるスレッドを持つようにします。インスタンスをシードするには、共有法線同期ランダムを使用するだけです。

于 2012-03-07T12:13:08.010 に答える