タグ付けされた質問 「multithreading」

マルチスレッドとは、複数の同時実行ストリーム(一般にスレッドと呼ばれる)を利用して、コンピューターまたはプログラムが作業を同時にまたは非同期に実行する機能です。

10
新しい構成の1つではなく、プレーンな古いThreadオブジェクトを使用する方が望ましい場合はありますか?
ThreadC#の最近のバージョンでのクラスの使用を回避または推奨するために、ブログの投稿やここSOで多くの人を目にします(もちろん、4.0以上とTask&を追加したことを意味します)。以前にも、プレーンな古いスレッドの機能を多くの場合ThreadPoolクラスで置き換えることができるという事実についての議論がありました。 また、他の特殊なメカニズムにより、醜い+ コンボを置き換えるThreadなど、クラスの魅力がさらに低下しています。TimerThreadSleepBackgroundWorker それでも、Thread一部の人々(私自身を含む)にとっては非常に親しみやすい概念であり続けるようです。ある種の並列実行を伴うタスクに直面すると、すぐに古き良きThreadクラスを使用するようになります。私は自分のやり方を修正する時がきたのかと最近思っています。 だから私の質問は、Thread上記の構成のいずれかではなく、プレーンな古いオブジェクトを使用することが必要または有用な場合がありますか?
112 c#  .net  multithreading 

5
LinkedBlockingQueueとConcurrentLinkedQueue
私の質問は、以前に尋ねたこの質問に関連しています。プロデューサースレッドとコンシューマースレッド間の通信にキューを使用している状況では、一般的に人々は、LinkedBlockingQueueまたはConcurrentLinkedQueue? どちらを使用する場合の利点/欠点は何ですか? APIの観点から見ることができる主な違いは、LinkedBlockingQueueオプションで境界を設定できることです。

3
ロックオブジェクトが静的である必要があるのはなぜですか?
マルチスレッドでのロックには、プライベートな静的な読み取り専用オブジェクトを使用することが非常に一般的です。privateは、カプセル化を強化することでロックオブジェクトへのエントリポイントを減らし、したがって最も重要なものへのアクセスを減らすことを理解しています。 しかし、なぜ静的なのでしょうか? private static readonly object Locker = new object(); 最後にフィールドは私のクラス内でのみ使用され、代わりにこれを使用することもできます: private readonly object Locker = new object(); コメントは? 更新: 例として、このコードを貼り付けました(単なる例)。私はこれに静的または非静的ロッカーを使用することができ、どちらも正常に動作します。以下の答えを考えると、このようにロッカーを定義する必要がありますか?(申し訳ありませんが、来週インタビューがあります。すべての詳細を知る必要があります:) private readonly object Locker = new object(); そしてここにコードがあります: private int _priceA; private int _priceB; private EventWaitHandle[] _waithandle; private readonly IService _service; //ctor public ModuleAViewModel(IService service) { _service = service; …

11
トラフィックの多いシナリオでのASP.NETでのThreadPool.QueueUserWorkItemの使用
ASP.NETでも、短期間のバックグラウンドタスク(クリティカルでないとしましょう)にThreadPoolを使用することがベストプラクティスであると常に考えていましたが、そうでない場合はこの記事に出くわしました。引数は、ASP.NET関連の要求を処理するためにThreadPoolを残すべきであるということです。 これが、これまでに小さな非同期タスクを実行してきた方法です。 ThreadPool.QueueUserWorkItem(s => PostLog(logEvent)) そして、記事は代わりに明示的にスレッドを作成することを提案しています: new Thread(() => PostLog(logEvent)){ IsBackground = true }.Start() 最初の方法には管理と制限があるという利点がありますが、バックグラウンドタスクがASP.NETリクエストハンドラーを使用してスレッドを争っている可能性があります(記事が正しい場合)。2番目のメソッドはThreadPoolを解放しますが、制限がなくなるため、リソースを使いすぎる可能性があります。 だから私の質問は、記事のアドバイスは正しいですか? サイトのトラフィックが多すぎてThreadPoolがいっぱいになっている場合は、帯域外に移行することをお勧めします。または、完全なThreadPoolはとにかくリソースの制限に達していることを意味します。独自のスレッドを開始しようとすべきではありませんか? 明確化:私は、別のプロセスを必要とする高価な作業項目ではなく、重要ではない小さな非同期タスク(たとえば、リモートロギング)の範囲で質問しているだけです(この場合、より堅牢なソリューションが必要になることに同意します)。

7
node.jsでの並行タスクにはどちらが適していますか?繊維?ウェブワーカー?またはスレッド?
私はいつかnode.jsに出会いましたが、とても気に入りました。しかし、すぐに、CPUを集中的に使用するタスクを実行する機能が大幅に不足していることがわかりました。そこで、グーグルを開始し、問題を解決するために次の回答を得ました。ファイバー、ウェブワーカー、スレッド(thread-a-gogo)。どちらを使用するかは混乱であり、そのうちの1つは間違いなく使用する必要があります。結局のところ、IOだけが得意で他には何もないサーバーを用意する目的は何でしょうか。提案が必要です! 更新: 私は遅れている方法を考えていました。それ以上の提案が必要です。さて、私が考えたのはこれです:(thread_a_gogoまたは多分ウェブワーカーを使用して)いくつかのスレッドを作成しましょう。今、それらをさらに必要とする場合、さらに作成することができます。ただし、作成プロセスにはいくつかの制限があります。(システムによって暗示されるわけではありませんが、おそらくオーバーヘッドが原因です)。これで、制限を超えると、新しいノードをフォークして、そのノード上にスレッドを作成し始めることができます。この方法では、制限に達するまで続行できます(結局のところ、プロセスにも大きなオーバーヘッドがあります)。この制限に達すると、タスクのキューイングを開始します。スレッドが解放されるたびに、新しいタスクが割り当てられます。このように、それはスムーズに進むことができます。 それで私はそう思ったのです。このアイデアは良いですか?私はこのすべてのプロセスとスレッドに関するものは少し新しいので、専門知識はありません。ご意見をお聞かせください。 ありがとう。:)

5
parallel.foreachを解除しますか?
parallel.forループから抜け出すにはどうすればよいですか? 次のようなかなり複雑なステートメントがあります。 Parallel.ForEach<ColorIndexHolder>(ColorIndex.AsEnumerable(), new Action<ColorIndexHolder>((ColorIndexHolder Element) => { if (Element.StartIndex <= I && Element.StartIndex + Element.Length >= I) { Found = true; break; } })); 並列クラスを使用すると、このプロセスを大幅に最適化できます。しかしながら; 並列ループを解除する方法がわかりませんか?break;文は、次の構文エラーがスローされます。 中断または継続する囲みループがない

7
ロックステートメントはどれくらい高価ですか?
私はマルチスレッドと並列処理を実験しており、基本的なカウントと処理速度の統計分析を行うためのカウンターが必要でした。クラスの同時使用に関する問題を回避するために、クラスのプライベート変数にロックステートメントを使用しました。 private object mutex = new object(); public void Count(int amount) { lock(mutex) { done += amount; } } しかし、私は不思議に思っていました...変数のロックはどれほど高価ですか パフォーマンスへの悪影響は何ですか?

5
Scalaアクター:受信vs反応
まず、Javaの経験は豊富ですが、関数型言語に興味を持つようになったのはつい最近のことです。最近、Scalaを検討し始めました。Scalaはとてもいい言語のようです。 ただし、「Scalaでのプログラミング」でScalaのActorフレームワークについて読んでいますが、理解できないことが1つあります。30.4章では、react代わりにreceiveを使用するとスレッドを再利用できるようになると述べています。これは、JVMではスレッドが高価であるため、パフォーマンスに優れています。 これは、のreact代わりに呼び出すことを覚えている限り、receive好きなだけアクターを開始できることを意味しますか?Scalaを発見する前は、Erlangで遊んでおり、Programming Erlangの作者は200,000を超えるプロセスをスポーンさせずに生み出したことを誇りに思っています。Javaスレッドでそれを行うのは嫌です。Erlang(およびJava)と比較して、Scalaではどのような制限を見ていますか? また、このスレッドの再利用はScalaでどのように機能しますか?簡単にするために、スレッドが1つしかないと仮定します。私が開始するすべてのアクターはこのスレッドで順次実行されますか、それとも何らかのタスク切り替えが行われますか?たとえば、メッセージを互いにピンポンする2つのアクターを開始した場合、それらが同じスレッドで開始された場合、デッドロックの危険がありますか? Scalaのプログラミングによると、使用するアクターの作成はを使用する場合reactよりも困難ですreceive。react戻らないので、これはもっともらしく聞こえます。ただし、この本では、をreact使用してループ内に配置する方法を示していますActor.loop。結果として、 loop { react { ... } } 私にとって、これは while (true) { receive { ... } } これは本の前半で使用されています。それでも、本は「実際には、プログラムには少なくとも数個が必要になる」と述べていreceiveます。だから私はここで何が欠けていますか?返す以外に、receiveそれreactができないことは何ですか?そして、なぜ私は気にしますか? 最後に、私が理解していないことの核心にたどり着きます。この本ではreact、スレッドを再利用するためにコールスタックを破棄することがどのように可能になるかについて、本が繰り返し言及しています。それはどのように機能しますか?呼び出しスタックを破棄する必要があるのはなぜですか?そして、関数が例外(react)をスローすることによって終了したときにコールスタックが破棄されるのはなぜreceiveですか? 『Scalaでのプログラミング』は、ここでの主要な問題のいくつかにつまづいているように思えますが、それは残念です。




16
Android-起動時に白い画面を表示しない
誰もが知っているように、多くのAndroidアプリは、最初Activityにフォーカスが当たる前に、ごく短時間、白い画面を表示します。この問題は、次の場合に発生します。 グローバルApplicationクラスを拡張し、そこで主要な初期化を実行するAndroidアプリ。Application オブジェクトは常に最初のオブジェクトActivity(デバッガーで確認できる事実)の前に作成されるため、これは理にかなっています。これが私の場合の遅延の原因です。 スプラッシュスクリーンの前にデフォルトのプレビューウィンドウを表示するAndroidアプリ。 android:windowDisablePreview = "true"ここでは明らかに設定は機能しません。また、[残念ながら]スプラッシュスクリーンはを使用しているため、スプラッシュスクリーンの親テーマをここでTheme.Holo.NoActionBar説明するように設定することもできません。ActionBar 一方、Applicationクラスを拡張しないアプリは、起動時に白い画面を表示しません。 問題は、理想的には、Applicationオブジェクトで実行される初期化は、最初のものが表示される前に行われる必要Activityがあることです。だから私の質問は、オブジェクトを使用せずにアプリの起動時にこれらの初期化を実行するにはどうすればよいApplicationですか?おそらくThreadまたはを使用しているServiceと思いますか? これは考えるべき興味深い問題です。NoActionBar私のスプラッシュ画面には実際にはActionBarいくつかの無関係な理由のために悲劇的にあるので、私は(テーマを設定することによって)通常の方法でそれをバイパスすることはできません。 注意: 私はすでに次の質問に言及しました: アプリの起動時に白い画面を修正する方法? Androidスプラッシュ画面は最初は白いですか? スプラッシュスクリーンの前に白い画面 Androidアプリ起動時の白い背景 Androidでアプリの実行を開始すると1秒間白い画面が表示されるのはなぜですか? 参照: パターン–起動画面。 ブランド化された起動画面:Androidの新しいスプラッシュ。 スプラッシュスクリーン正しい方法。

5
Pythonでサブプロセス、マルチプロセッシング、スレッドを決定しますか?
実行しているマシンで複数のプロセッサを利用できるように、Pythonプログラムを並列化したいと思います。私の並列化は非常に単純です。プログラムのすべての並列「スレッド」は独立しており、それらの出力を別々のファイルに書き込みます。情報を交換するためにスレッドは必要ありませんが、パイプラインの一部のステップは出力に依存しているため、スレッドがいつ終了するかを知ることが不可欠です。 移植性は重要です。Mac、Linux、WindowsのすべてのPythonバージョンで実行したいのです。これらの制約を考えると、これを実装するのに最も適切なPythonモジュールはどれですか。スレッド、サブプロセス、マルチプロセッシングのいずれかを決定しようとしています。これらはすべて、関連する機能を提供しているようです。 これについて何か考えはありますか?ポータブルで最も簡単なソリューションが欲しいです。



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