問題タブ [forkjoinpool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - マルチスレッド環境で各サブタスクを並行して実行する
オブジェクトを入力パラメーターとして受け取り、そのオブジェクトに基づいてライブラリに取り組んでいDataRequest
ます。URL を作成し、Apache http クライアントを使用してアプリ サーバーを呼び出し、顧客に応答を返します。私たちのライブラリを使用しています。executeSync
同じ機能を取得するためにメソッドを呼び出す顧客もいれexecuteAsync
ば、データを取得するために私たちのメソッドを呼び出す顧客もいます。
executeSync()
- 結果が出るまで待ち、結果を返します。executeAsync()
- 必要に応じて、他の処理が完了した後に処理できる Future をすぐに返します。
以下は、DataClient
上記の2つのメソッドを持つ私のクラスです。
以下は、URLを作成してアプリサーバーを呼び出すDataFetcherTask
静的クラスも持つ私のクラスです。DataRequestTask
各DataRequest
オブジェクトにはオブジェクトがありDataResponse
ます。誰かがDataRequest
オブジェクトを渡してライブラリを呼び出すと、内部でList<DataRequest>
オブジェクトを作成し、各DataRequest
オブジェクトを並行して呼び出して、リスト内のList<DataResponse>
各DataResponse
オブジェクトが対応するDataRequest
オブジェクトの応答を持つ場所に戻ります。
以下の流れです。
- 顧客は、オブジェクト
DataClient
を渡すことによってクラスを呼び出しDataRequest
ます。要件に応じて、呼び出しexecuteSync()
またはメソッドを実行できます。executeAsync()
DataFetcherTask
クラス (サブタイプのRecursiveTask
1 つ) で、単一のオブジェクトを指定すると、リスト内の各オブジェクトに対して各サブタスクを並列に生成して呼び出します。これらのサブタスクは、親タスクと同じように実行されます。ForkJoinTask's
key
DataRequest
List<DataRequest>
DataRequest
ForkJoinPool
DataRequestTask
クラスではDataRequest
、URL を作成して各オブジェクトを実行し、そのDataResponse
オブジェクトを返します。
問題文:
このライブラリは非常に高いスループット環境で呼び出されるため、非常に高速である必要があります。同期呼び出しの場合、別のスレッドで実行しても問題ありませんか? この場合、スレッドのコンテキスト切り替えのコストに加えて、スレッドに余分なコストとリソースが発生するため、少し混乱しています。また、ForkJoinPool
ここで使用しているため、余分なスレッドプールを使用する必要がありませんが、ここで正しい選択ですか?
同様にパフォーマンス効率の良い同じことを行うためのより良い効率的な方法はありますか? 私はJava 7を使用しており、Guavaライブラリにもアクセスできるので、それが何かを簡素化できるのであれば、私もそれに対してオープンです.
非常に重い負荷の下で実行すると、競合が発生しているようです。このコードが非常に重い負荷の下で実行されたときに、スレッドの競合が発生する可能性はありますか?