タグ付けされた質問 「parallel-processing」

並列処理は、単なる並行処理とは対照的に、並列に実行されるすべてのスレッドレベルおよび/または命令レベルのタスクを開始/実行/終了することが保証され、同時に実行されるコードパスの完了を保証します。


6
可能な場合は常に並列ストリームを使用する必要がありますか?
Java 8とラムダを使用すると、コレクションをストリームとして反復するのが簡単で、並列ストリームを使用するのと同じくらい簡単です。docsの 2つの例、2番目の例はparallelStreamを使用しています。 myShapesCollection.stream() .filter(e -> e.getColor() == Color.RED) .forEach(e -> System.out.println(e.getName())); myShapesCollection.parallelStream() // <-- This one uses parallel .filter(e -> e.getColor() == Color.RED) .forEach(e -> System.out.println(e.getName())); 順序を気にしない限り、パラレルを使用することは常に有益ですか?より多くのコアで作業を分割する方が速いと思う人もいるでしょう。 他の考慮事項はありますか?並列ストリームはいつ使用し、非並列ストリームはいつ使用する必要がありますか? (この質問は、並列ストリームをいつどのように使用するかについてのディスカッションをトリガーするためのものです。常にそれらを使用することは良い考えだと思うからではありません。)

14
Java 8並列ストリームのカスタムスレッドプール
Java 8 並列ストリームのカスタムスレッドプールを指定することは可能ですか?どこにも見つかりません。 サーバーアプリケーションがあり、並列ストリームを使用したいとします。しかし、アプリケーションは大きく、マルチスレッドなので、それを区分けしたいと思います。別のモジュールからのapplicationblockタスクの1つのモジュールで実行速度の遅いタスクが必要ではありません。 異なるモジュールに異なるスレッドプールを使用できない場合、それは実際の状況のほとんどで並列ストリームを安全に使用できないことを意味します。 次の例を試してください。別のスレッドで実行されるCPU集中タスクがいくつかあります。タスクは並列ストリームを活用します。最初のタスクは壊れているため、各ステップには1秒かかります(スレッドスリープによってシミュレートされます)。問題は、他のスレッドがスタックして、壊れたタスクが完了するのを待つことです。これは不自然な例ですが、サーブレットアプリと誰かが共有フォーク結合プールに長時間実行タスクを送信するとします。 public class ParallelTest { public static void main(String[] args) throws InterruptedException { ExecutorService es = Executors.newCachedThreadPool(); es.execute(() -> runTask(1000)); //incorrect task es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.shutdown(); es.awaitTermination(60, TimeUnit.SECONDS); } private static void runTask(int …

25
ExecutorServiceを使用して、すべてのスレッドが完了するのを待つ方法は?
次のように、一度にいくつかのタスクを4回実行する必要があります。 ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } //...wait for completion somehow それらがすべて完了したら、どうすれば通知を受け取ることができますか?今のところ、いくつかのグローバルタスクカウンターを設定し、すべてのタスクの終わりにそれを減らすことよりも良いことを考えることはできません。その後、無限ループでこのカウンターを監視して0にします。または、Futureのリストを取得し、それらすべてに対して無限ループモニターisDoneを実行します。無限ループを含まないより良い解決策は何ですか? ありがとう。

18
並行プログラミングと並列プログラミングの違いは何ですか?
並行プログラミングと並列プログラミングの違いは何ですか?私はグーグルに尋ねましたが、その違いを理解するのに役立つものは何も見つかりませんでした。両方の例を教えていただけますか? 今のところ私はこの説明を見つけました:http : //www.linux-mag.com/id/7411-「並行性はプログラムのプロパティです」vs「並列実行はマシンのプロパティ」では十分ではありません-それでも私は何が何であるか言うことができません。

13
コアあたりの最適なスレッド数
たとえば、4コアのCPUがあり、最小限の時間でいくつかのプロセスを実行したいとします。プロセスは理想的には並列化が可能なため、無制限の数のスレッドでそのチャンクを実行でき、各スレッドにかかる時間は同じです。 私は4つのコアを持っているので、単一のコアは特定の瞬間に単一のスレッドしか実行できないため、コアよりも多くのスレッドを実行してもスピードアップは期待できません。私はハードウェアについてあまり知らないので、これは推測にすぎません。 コアよりも多くのスレッドで並列化可能なプロセスを実行する利点はありますか?つまり、4スレッドではなく4000スレッドを使用して実行した場合、プロセスはより速く、遅く、またはほぼ同じ時間で終了しますか?

13
単純なPythonループを並列化するにはどうすればよいですか?
これはおそらく些細な質問ですが、Pythonで次のループを並列化するにはどうすればよいですか? # setup output lists output1 = list() output2 = list() output3 = list() for j in range(0, 10): # calc individual parameter value parameter = j * offset # call the calculation out1, out2, out3 = calc_stuff(parameter = parameter) # put results into correct output list output1.append(out1) output2.append(out2) output3.append(out3) …



2
非同期プログラミングとマルチスレッドの違いは何ですか?
私はそれらは基本的に同じものだと思っていました—プロセッサー間でタスクを分割するプログラムを書く(2つ以上のプロセッサーを持つマシン上で)。それから私はこれを読んでいます、それは言う: 非同期メソッドは、非ブロッキング操作を目的としています。非同期メソッドのawait式は、待機中のタスクの実行中に現在のスレッドをブロックしません。代わりに、式は継続としてメソッドの残りの部分にサインアップし、asyncメソッドの呼び出し元に制御を返します。 asyncおよびawaitキーワードを使用しても、追加のスレッドが作成されることはありません。非同期メソッドは独自のスレッドで実行されないため、非同期メソッドはマルチスレッドを必要としません。メソッドは現在の同期コンテキストで実行され、メソッドがアクティブな場合にのみスレッドで時間を使用します。Task.Runを使用してCPUにバインドされた作業をバックグラウンドスレッドに移動できますが、バックグラウンドスレッドは、結果が利用可能になるのを待っているだけのプロセスには役立ちません。 そして、誰かがそれを英語に翻訳できるかどうか疑問に思っています。これは、非同期性(つまり、単語ですか?)とスレッド化を区別しているようで、非同期タスクはあるがマルチスレッド化はできないプログラムを作成できることを示しています。 これで、pgの例のような非同期タスクの考え方がわかりました。ジョンスキートのC#の詳細、第3版の467 async void DisplayWebsiteLength ( object sender, EventArgs e ) { label.Text = "Fetching ..."; using ( HttpClient client = new HttpClient() ) { Task<string> task = client.GetStringAsync("http://csharpindepth.com"); string text = await task; label.Text = text.Length.ToString(); } } asyncキーワードの手段が、「この機能は、それが呼ばれるたびに、そのコールが呼ばれるようにした後、その完了がすべてのために必要とされるコンテキストで呼び出されることはありません。」 つまり、あるタスクの途中でそれを書く int x = 5; DisplayWebsiteLength(); double …

11
.Net 4.0にConcurrentList <T>はありませんか?
System.Collections.Concurrent.Net 4.0の新しい名前空間を見て、とても嬉しく思いました。私が見てきたConcurrentDictionary、ConcurrentQueue、ConcurrentStack、ConcurrentBagおよびBlockingCollection。 不思議なことに欠けているように見えるのは、ConcurrentList&lt;T&gt;です。私はそれを自分で書く必要がありますか(またはWebから取得する必要がありますか?)) ここに明らかなものがないのですか?


3
Parallel.ForEach()とforeach(IEnumerable <T> .AsParallel())の比較
Erg、私はReflectorを使用してBCLでこれら2つのメソッドを見つけようとしていますが、見つけることができません。これら2つのスニペットの違いは何ですか? A: IEnumerable&lt;string&gt; items = ... Parallel.ForEach(items, item =&gt; { ... }); B: IEnumerable&lt;string&gt; items = ... foreach (var item in items.AsParallel()) { ... } どちらを使用するかによって異なる影響はありますか?(両方の例の括弧で囲まれた本文で私がしていることはすべてスレッドセーフであると仮定します。)

6
Pythonで並列プログラミングを行う方法は?
C ++の場合、OpenMPを使用して並列プログラミングを行うことができます。ただし、OpenMPはPythonでは機能しません。Pythonプログラムの一部を並列化したい場合はどうすればよいですか? コードの構造は次のように考えることができます: solve1(A) solve2(B) どこsolve1とsolve2二つの独立した機能です。実行時間を短縮するために、この種のコードを順番にではなく並行して実行するにはどうすればよいですか?誰かが私を助けてくれることを願っています。よろしくお願いします。コードは次のとおりです。 def solve(Q, G, n): i = 0 tol = 10 ** -4 while i &lt; 1000: inneropt, partition, x = setinner(Q, G, n) outeropt = setouter(Q, G, n) if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) &lt; tol: break node1 = partition[0] …

6
スレッドモジュールとマルチプロセッシングモジュールの違いは何ですか?
threadingとのmultiprocessingモジュールをPythonで使用して特定の操作を並行して実行し、コードを高速化する方法を学んでいます。 threading.Thread()オブジェクトとオブジェクトの違いが何であるかを理解するために、これについて(理論的な背景がないので)難しいと感じていますmultiprocessing.Process()。 また、ジョブのキューをインスタンス化し、4つ(たとえば)だけを並行して実行し、他のリソースが実行される前にリソースが解放されるのを待つ方法は、私には完全には明らかではありません。 ドキュメントの例は明確ですが、完全ではありません。少し複雑にしようとすると、多くの奇妙なエラーが表示されます(酸洗いできないメソッドなど)。 では、threadingとmultiprocessingモジュールをいつ使用すればよいですか? これら2つのモジュールの背後にある概念と、それらを複雑なタスクに適切に使用する方法を説明するリソースに私をリンクできますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.