問題タブ [multithreading]
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: notify() と notifyAll() の対比
「 と の違い 」を Google で検索するnotify()
とnotifyAll()
、多くの説明が表示されます (javadoc の段落は省略します)。それはすべて、ウェイクアップされている待機中のスレッドの数に要約さnotify()
れnotifyAll()
ます。
ただし(これらの方法の違いを正しく理解している場合)、さらにモニターを取得するために常に1つのスレッドのみが選択されます。最初のケースでは VM によって選択されたもの、2 番目のケースではシステム スレッド スケジューラによって選択されたものです。両方の正確な選択手順 (一般的な場合) は、プログラマーにはわかりません。
では、notify( )とnotifyAll()の有用な違いは何ですか? 何か不足していますか?
c++ - タスク指向のスレッド プーリング
以下の投稿に示すように、IO 完了ポートに関連付けられたスレッド プールを使用して、サーバー アプリケーションでワーカー タスクを実行するためのモデルを作成しました。
http://blogs.msdn.com/larryosterman/archive/2004/03/29/101329.aspx
このプログラミング モデルに役立つブーストのクラスはありますか?
c# - アプリケーションは、.NETまたはJavaで複数のコアまたはCPUをどのように使用できますか?
.NETまたはJavaでスレッドまたはプロセスを起動する場合、起動するプロセッサまたはコアを選択する方法はありますか?このような場合、共有メモリモデルはどのように機能しますか?
python - 複数のコアを使用するように Ruby または Python の Web サイトを作成するには?
PythonとRubyにはインタープリター スレッドごとに 1 つのカーネル スレッドがありますが、潜在的に共有されるデータ構造を保護するために使用されるグローバル インタープリター ロック (GIL) があるため、マルチプロセッサーの実行が抑制されます。C または C++ で記述された言語の部分はフリー スレッド化できますが、複数のプロセスを使用しない限り、純粋に解釈されたコードでは不可能です。これを達成するための最良の方法は何ですか?FastCGI を使用していますか? 仮想化されたサーバーのクラスターまたはファームを作成しますか? 同等の Java である JRuby と Jython を使用していますか?
java - 複数のスレッドがネイティブ呼び出しでスタックする (Java)
Fedora Core 6 と JDK 1.5.0_08 で実行されているアプリケーションに問題があります。
ある程度の稼働時間 (通常は数日) の後、スレッドはネイティブ メソッドでスタックし始めます。
スレッドは次のようにロックされています。
また
私にとって特に不可解なのは、これです:
VM が再起動されるまで、スレッドは停止したままになります。
ここで何が起こっているのか、何がネイティブメソッドをブロックさせているのか、誰か教えてもらえますか? 各スタック スレッドの上部にあるモニター エントリ アドレス範囲は異なります。このモニターを保持しているものを特定するにはどうすればよいですか?
提案やアドバイスをいただければ幸いです。
ありがとう、デビッド
c++ - 異なる優先順位で任意のタスクを実行するためのスレッドプール
私は自分の仕事に多くの設計要件があるスレッドプールの設計を考え出そうとしています。これは、ソフトウェアを動作させるための実際の問題であり、難しい作業です。私は実用的な実装を持っていますが、これをSOに投げて、人々がどのような興味深いアイデアを思い付くことができるかを見て、私の実装と比較して、それがどのように積み重なるかを確認したいと思います。私はできる限り要件に具体的にしようとしました。
スレッドプールは一連のタスクを実行する必要があります。タスクは、短時間実行(<1秒)または長時間実行(数時間または数日)にすることができます。各タスクには関連する優先度があります(1=非常に低いから5=非常に高い)。タスクは他のタスクの実行中にいつでも到着する可能性があるため、タスクが到着すると、スレッドプールはこれらを取得し、スレッドが使用可能になったときにスケジュールする必要があります。
タスクの優先度は、タスクの長さに完全に依存しません。実際、タスクを実行するだけで、タスクの実行にかかる時間を知ることは不可能です。
一部のタスクはCPUバウンドですが、一部はIOバウンドです。特定のタスクが何であるかを事前に知ることは不可能です(ただし、タスクの実行中に検出できる可能性があると思います)。
スレッドプールの主な目標は、スループットを最大化することです。スレッドプールは、コンピューターのリソースを効果的に使用する必要があります。理想的には、CPUにバインドされたタスクの場合、アクティブなスレッドの数はCPUの数と等しくなります。IOバウンドタスクの場合、ブロッキングがスループットに過度に影響しないように、CPUよりも多くのスレッドを割り当てる必要があります。ロックの使用を最小限に抑え、スレッドセーフ/高速コンテナを使用することが重要です。
一般に、CPU優先度の高いタスクを実行する必要があります(参照:SetThreadPriority)。優先度の低いタスクは、優先度の高いタスクの実行を「ブロック」してはなりません。したがって、優先度の低いタスクがすべて実行されているときに優先度の高いタスクが実行されると、優先度の高いタスクが実行されます。
タスクには、「最大実行タスク」パラメーターが関連付けられています。各タイプのタスクは、一度に最大でこの数のタスクの同時インスタンスのみを実行できます。たとえば、キューに次のタスクがあるとします。
- A-1000インスタンス-低優先度-最大タスク1
- B-1000インスタンス-低優先度-最大タスク1
- C-1000インスタンス-低優先度-最大タスク1
動作する実装は、(最大で)1 A、1 B、および1Cしか同時に実行できませんでした。
Windows XP、Server 2003、Vista、およびServer 2008(最新のサービスパック)で実行する必要があります。
参考までに、次のインターフェイスを使用する場合があります。
javascript - JavaScript がマルチスレッドをサポートしていないのはなぜですか?
これは意図的な設計上の決定なのか、それとも現在のブラウザーの問題であり、今後のバージョンで修正されるのでしょうか?
javascript - マルチスレッド JavaScript のセキュリティへの影響
マルチスレッドの JavaScript に関するこの質問を読んで、JavaScript が複数のスレッドを生成できるようにすることで、セキュリティ上の影響があるかどうか疑問に思っていました。たとえば、オペレーティング システムまたはインタープリターを圧倒し、「未定義の動作領域」への侵入をトリガーするために、悪意のあるスクリプトがスレッドを次々と生成するリスクがあるでしょうか?それともほとんど問題ではないでしょうか? スレッド化されていない実装が影響を受けないスレッドをサポートする javascript の仮想実装を攻撃が悪用する可能性のある他の方法はありますか?
更新: ブラウザーをロックすることは、未定義の動作のエクスプロイトを作成することと同じではないことに注意してください。
asp.net - マルチスレッド環境でのファイルアクセス戦略(Webアプリ)
Webサービスから取得され、Webアプリケーション内にローカルにキャッシュされたデータのXML表現であるファイルがあります。このデータは非常に静的ですが、変更される可能性があるという考え方です。そこで、ファイルにキャッシュするように設定し、モニターを貼り付けて、削除されているかどうかを確認しました。削除されると、ファイルはソースから更新されて再構築されます。
ただし、マルチスレッド環境では、ファイルの読み取り/書き込み中にデータにアクセスしようとしているため、明らかに問題が発生しています。
これは、ロックするオブジェクトを追加したため、混乱を招きます。これは、読み取り/書き込み中は常にロックされます。他のスレッドからのアクセスの試みは、ロックが解除されるまで「待機」するように指示されるというのが私の理解でしたか?
お知らせするために、私はマルチスレッド開発に本当に慣れていないので、これが私の側の混乱であることを完全に受け入れます:)
- 私は何かが足りないのですか?
- マルチスレッド環境での最良のファイルアクセス戦略は何ですか?
編集
申し訳ありませんが、これはASP.NET2.0を使用していると言っておくべきでした:)
c# - 複数のスレッドから単体テストを行う最良の方法は何ですか?
この種のことは、私の別の質問の続きです。
基本的に、ファイルにアクセスするためのコードを取得したら (すぐに回答を確認します)、それをテストする最良の方法は何でしょうか?
多くのBackgroundWorkerまたは何かを生成し、それらすべてにファイルのロード/保存を指示し、さまざまなファイル/オブジェクトサイズでテストするメソッドを作成することを考えています。次に、スレッドから応答を取得して、失敗したか、成功したか、世界を内破させたかなどを確認します。
これにアプローチするための最良の方法について何か提案はありますか? 前に言ったように、これは私にとってまったく新しいことです:)
編集
ajmastrean の投稿に続いて:
私はDebug.Assertsでテストするためにコンソールアプリを使用しています:)
アップデート
私は元々 、スレッド化に対処するためにBackgroundWorkerを使用していました (Windows 開発者の使用に慣れているため) 続行する前に複数の ops (スレッド) を完了する必要があるテストを実行しているときに、それが次のようになることに気付きました。これを行うためのちょっとしたハック。
その後、 ajmastreanの投稿をフォローアップしたところ、並行操作を処理するためにThreadクラスを実際に使用する必要があることに気付きました。この方法を使用してリファクタリングします (別のアプローチではありますが)。