私のアプリケーションでは、多くのnetwork-ioバウンドタスクといつかは1つのioバウンドタスクを実行して、問題を解決しなければなりません。これらのタスクは現在、Javaの標準スレッドプールメカニズムを使用して実行されています。私はfork-and-joinフレームワークに移行できるかどうか疑問に思っていますか?しかし、問題は、forkされたフレームワークは、通常、バインドされた操作やCPUバインドを解決するために使用されているということですか?私は彼らが主にCPUバインド操作のためであると仮定します。fork-and-joinフレームワークはマルチコアプロセッサを使用するために仕事を盗むテクニックを使用しますが、IOバインドされたタスクに使用すると悪影響がありますか?Javaのfork-and-joinスレッドプールはIOバインドタスクの実行に適していますか?
20
A
答えて
23
フォークジョインは、計算に基づくタスク用に設計されているため、一般的にはノーと言います。 Forkフレームワークには、スレッドがしばらくブロックされていて新しいタスクが並んでいないことをFJフレームワークに伝えるためのAPI(ManagedBlocker API)がありますが、実際にはロックを取得するなどの短い待ち時間のために設計されていますIOを待ちます。
フォークジョインを使用するシステムがあり、IOバインドされたタスクを別のエクゼキュータプールにシャントします。データが到着すると、タスクがfork-joinプールにトリガーされ、そこでCPUバインドされた作業だけが発生します。
2
問題の "I/O bound"の問題に対処しようとしている場合、標準スレッドからfork-and-joinに切り替えることは、ものを改善することになります...あなたが現在のスレッドベースのソリューションを適切に使用できます。
を(アレックス・ミラーの回答に基づいて、スイッチは実際に。物事が大幅に悪化させる可能性が)それとも別の言い方をするために、あなたのI/Oバウンドアプリケーションはより速く行くようにする方法は、I作る問題に対処することです/ O bound ...またはシステムのI/O帯域幅を増やします。
1
この場合、フォークジョインには魅力的な利点はないようです。
いくつかのリソースをあまりにも激しく動かすことはないので、どちらの面でも不利な点はないようです。
このスレッドプールは、他に重要な開発がない限り残っています。
関連する問題
- 1. ScalaアクターでCPUバインドタスクを実行していますか?
- 2. マルチスレッド - スレッドプールは適していますか?
- 3. Javaスレッドプールexecturは一度実行(実行可能)メソッドを実行します
- 4. NSUserDefaultsは実行時に常にIOを実行しますか?
- 5. Java実行間のJava文字IO
- 6. Haskell Snap:ハンドラ内でIOアクションを実行していますか?
- 7. Javaのスレッドプールから静的メソッドを実行
- 8. `main :: IO()`のhaskellで外部プロセスを実行しています
- 9. Webdriver IOはすべてのコマンドを順次実行します
- 10. スレッドプールを順番に実行
- 11. スレッドプールを使用してタスクを実行しているときにRejectedExecutionExceptionが発生しました。JAVA
- 12. スレッドプールは単一のスレッド関数で実行できますか?
- 13. スプリングバッチジョブをスレッドプールして実行するには?
- 14. JavaのファイルIOの最適な方法は何ですか
- 15. IOバインドされたタスクとCPUバインドタスクを持つNode.jsアプリケーションのクラスタリング/スポーリングの子プロセスのテクニックを適用するにはどうすればよいですか?
- 16. GHC IOマネージャはどのIOアクティビティをサポートしていますか?
- 17. C9.ioでAdonisJSを実行しています
- 18. javaのコンストラクタの後にコードを実行していますか?
- 19. スレッドプールの実装
- 20. JavaのスレッドプールでConcurency
- 21. Javaでの適応スレッドプールの設計上の考慮
- 22. Java AWTは2Dゲームのレンダリングに適していますか?
- 23. 私のようにプログラムを実行しています、適切
- 24. WindowsのJavaコードからMavenを実行していますか?
- 25. 「スレッドプール」はGoに関連していますか?
- 26. スレッドプールはウィンドウスケジューラに依存していますか?
- 27. どのstd :: async実装がスレッドプールを使用していますか?
- 28. Javaスレッドプール - どのタイプと数ですか?
- 29. CPUバインドタスクとI/Oタスクを行うときのプログラミングの違い
- 30. java:実行時にサブクラスにargコンストラクタを適用しない
「良い」とはどのような基準ですか?どのような種類のI/Oですか?ネットワーキング?ディスク?コンソール? GUI? fork-and-joinは本当に「スレッドプール」ですか? – EJP
そのネットワーク接続タスク。 – Shamik
洞察力のある質問; upvoted – necromancer