2017-07-04 12 views
1

JavaでURLを指定するためにN(N> 100)リクエストを1秒間に送信するにはどうすればよいですか? 私はそれのためにExecutorServiceとCountDownLatchを使用しています。Java、複数のget要求を毎秒送信する

CountDownLatch latch = new CountDownLatch(DEFAULT_LATCH_COUNT); 
    for (int i = 0; i < requestNumber; i++) { 
     executor.submit(RequestFactory.getInstance().createRequester(latch, url)); 
    } 
    latch.countDown(); 

しかし、リクエストごとに新しいスレッドを作成するのは良い方法ではありませんか? 500の非同期リクエストを毎秒送信する必要がある場合は、500スレッドを作成する必要があります。 これは正しい解決方法ですか、それとも他の解決方法がありますか?それは、スレッド間のコンテキスト切り替えのために、不要なオーバーヘッドが発生しますが、いない500個のスレッドを作成するための初期化のオーバーヘッドを言及するため

答えて

0

持つ500件のスレッドは、悪い習慣でしょう。

並列に実行できるスレッドの量は、利用可能なプロセッサの数(すなわち、Runtime.getRuntime().availableProcessors())によって制限されることに留意してください。したがって、コンピュータに使用可能なプロセッサが8つある場合、8つ以上のワーカースレッドを作成する必要はありません。

実際に作業を実行する場合、これはクッキーカッター作業者キューのシナリオです。ここでは、使用可能なプロセッサの数に等しいワーカースレッドの数を作成し、各ワーカースレッドが作業のすべてが(同様のAtomicIntegerか何かで追跡)

完了するまでの作業のチャンクを行うことができます
関連する問題