現在、GPars に問題があります。約 30 のスレッドを開始したいのですが、各スレッドの開始後 1 秒待ちたいと考えています。
私のコードは現在、次のようになっています(Groovy/Grails):
withPool(30) { // <= thread pool size
Mail.findAllByStatus("new").eachWithIndexParallel { mail, i -> // <= finds about 5000 mails
sleep(i*1000)
def doSomething = new Test()
doSomething.do(mail) // <= runs for about 60sec
}
}
このソリューションの問題は、「eachWithIndexParallel」がランダムな順序ですべてのスレッドを同時に開始することです。たとえば、5000 メールの場合:
スレッド 3500 を開始 = 3500 秒待機
スレッド 1000 を開始 = 1000 秒待機
....30 スレッドが開始されるまでスレッドが停止するのを待ちます
そして、私はこのような解決策が必要です:
スレッド 2500 を開始 = 1 秒待機
スレッド 5 を開始 = 2 秒待機
スレッド 4888 を開始 = 3 秒待機
...30 個のスレッドが開始されるまで、スレッドが停止するのを待ちます
カウント変数を使用するだけの場合、同時に開始するためにスレッドのカウント数が同じになるという問題があります...そして、各スレッド間に1秒の遅延があることが非常に重要です。
どうすればこの問題を解決できますか?