問題タブ [executors]
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 - Javaでタイマーを使用する最も推奨される方法は何ですか
私はJavaでソケットプログラミングに取り組んでいます。各接続でタイマーを使用する必要があり、次のコードのようにタイマーを使用しています:
タイマーを一時停止するには「stopTimer」関数を使用し、タイマータスクを削除するには「shutdownTimer」関数を使用しています。しかし、このようにタイマーを使用すると、数千の時間が同時に生きているため、数千のタイマースレッドを実行することがあります。この問題を防ぐ最善の方法は何ですか?
apache-spark - spark-1.6 と spark-1.5 のエグゼキュータの数
5 ノードの Spark クラスターを spark-1.5 から spark-1.6 にアップグレードしました (mapWithState 関数を使用するため)。spark-1.6 を使用した後、spark の奇妙な動作が発生しました。ジョブが一度に異なるノードの複数のエグゼキューターを使用していないということは、各ノードに単一のワーカーとエグゼキューターがある場合、並列処理がないことを意味します。Spark スタンドアロン モードでジョブを実行しています。
この問題に関連して、次の点に気付きました。
- spark-1.5 で同じジョブを実行すると、一度に異なるノード間で複数のエグゼキュータが使用されます。
- Spark-1.6 では、コア数 (spark.cores.max) を増やすと、ジョブは並列スレッドで実行されますが、同じエグゼキューター内で実行されます。
- Spark-1.6 では、各ノードのワーカー インスタンスの数を増やすと、ジョブはワーカーの数として並列に実行されますが、同じノード内で実行されます。
spark 1.6が並列処理のために一度に異なるノード間で複数のエグゼキューターを使用できない理由を誰でも提案できますか? あなたの提案は高く評価されます。
java - newFixedThreadPool はシングル スレッド プログラムより遅い
これが私の苦境の簡単な要約です。私はマルチスレッドを学んでいるので、約 300 枚の画像を処理するサムネイル作成プログラムを作成することにしました。最初は、すべてのサムネイル作成を 1 つのスレッドで行ったところ、約 99 秒かかりました。だから私は、を使用newFixedThreadPool()
するとプログラムが高速になると考えました。Executors.newFixedThreadPool()
スレッドを手動で作成するよりも、使用する方が安価であると聞いたことがあります。だから私はした:
4 は私のマシンのコア数です。
奇妙なことに、これを行うとプログラムが遅くなります。で 1 つのスレッドを使用したnewFixedThreadPool
場合、タスクは約 118 秒で完了しました。4 スレッドを使用した場合、タスクは約 99 秒で完了しました。最初のシングル スレッド操作よりも数ミリ秒遅くなります。10 スレッド使用した場合、所要時間は約 110 秒でした。
プログラムを高速化する方法がまったくわかりません。4 つのスレッドを使用するのが最適であり、シングル スレッド操作の約 4 分の 1 の時間で作業を完了できると考えていました。
何ができるかについて何か提案はありますか?これが私の(非常に醜いコードです)
java - Concurrent フレームワークでの shutdownNow の使用
私がFutures
のように使用している場合
また
システムはタスクが完了するのを待ちます。
executorService.shutdownNow();
上記のステートメントの後にあったとしても、ドキュメントに記載されているように、システムが既存のスレッドを強制的に終了する時期が本当にわかりません。タスクが完了して未来が返されるまで、システムはラインに到達しないためです。何か足りないのですか?それをテストするための別のテストケースシナリオはありますか?
私たちが言うとき、ie
shutdownNow
でのみ動作しますか?Runnable
executorService.submit(new MyRunnable())
編集:
私はいくつかの異なることを試してみましたが、
a)shutdownNow
では動作しませんinvokeAll
。
b)その後shutdownNow
存在する場合Future.get
、ステートメントは解決されるまでshutdownNow
ブロックされます (の場合)。 Future
Callable
c)shutdownNow
と完全に連携しRunnable
ます。
以下は、テスト用に記述された私のコードです。
そして私は次のようにそれをテストしています:
ここで、タスクは allCallables
です。
肝心なのはinvokeAll
、Future.get
操作をブロックしていることです。誰かが検証してもらえますか?
java - ExecutorService は停止しません。別の実行中のタスク内で新しいタスクを実行する場合
良い一日。
Web クローラー プロジェクトにブロッカーの問題があります。ロジックは単純です。最初に を作成しRunnable
、html ドキュメントをダウンロードし、すべてのリンクをスキャンしてから、資金提供されたすべてのリンクで新しいRunnable
オブジェクトを作成します。次に作成された各 new は、各リンクに対して Runnable
新しいオブジェクトを作成し、それらを実行します。Runnable
問題は、ExecutorService
決して止まらないことです。
CrawlerTest.java
CrawlerService.java
このアプリは、jsoup.org をスキャンしてすべての一意のリンクを探すのに約 20 秒かかります。しかし、10分待つだけでexecutorService.awaitTermination(10, TimeUnit.MINUTES);
、メインスレッドが死んでいて、まだ実行中のエグゼキュータが表示されます。
強制ExecutorService
的に正しく動作させるには?
問題は、メインスレッドではなく別のタスク内で executorService.execute を呼び出すことだと思います。
apache-spark - Apache Spark で ExecutorAllocationManagerSource メトリックを有効にする方法は?
Apache Spark で一般的なメトリクスを有効にする方法に関するドキュメントは、かなり薄いものです。
インスタンス内で、「ソース」はグループ化されたメトリックの特定のセットを指定します。ソースには次の 2 種類があります。
Spark コンポーネントの内部状態を収集する、MasterSource、WorkerSource などの Spark 内部ソース。各インスタンスは、自動的に追加される Spark ソースとペアになります。
低レベルの状態を収集する JvmSource などの一般的なソース。これらは構成オプションを介して追加でき、リフレクションを使用してロードされます。
すべての例は次の形式です。
ただし、これに関するもっともらしいと思われるバリエーションのいずれも、で生成されたメトリックを公開することを許可しませんでしたExecutorAllocationManagerSource
クラスは単体テストされておらず、他のドキュメントや例を見つけることができません。