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

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

4
Task.Delayをいつ使用し、Thread.Sleepをいつ使用しますか?
Task.DelayとThread.Sleepをいつ使用するかに関する適切なルールはありますか? 具体的には、一方が他方よりも効果的/効率的であることを提供するための最小値はありますか? 最後に、Task.Delayはasync / awaitステートマシンでコンテキスト切り替えを引き起こすため、それを使用するとオーバーヘッドが発生しますか?

7
ゾンビは.NETに存在しますか?
.NETでのロックについてチームメイトと話し合っていました。彼は非常に優秀で、低レベルのプログラミングと高レベルのプログラミングの両方に豊富なバックグラウンドを持っていますが、低レベルのプログラミングでの彼の経験は私のものをはるかに超えています。とにかく、彼は、「ゾンビスレッド」がシステムをクラッシュさせる確かに小さな可能性を回避するために、可能な限り高負荷になることが予想される重要なシステムでは.NETロックを回避すべきであると主張しました。私は日常的にロックを使用していて、「ゾンビスレッド」が何であるかを知らなかったので、私は尋ねました。彼の説明から私が得た印象は、ゾンビスレッドは終了したが、どういうわけかいくつかのリソースをまだ保持しているスレッドであるということです。ゾンビスレッドがシステムを破壊する方法について彼が示した例は、スレッドが何らかのオブジェクトをロックした後に何らかの手順を開始した場合でした。そして、ロックが解放される前に、ある時点で終了します。この状況は、システムをクラッシュさせる可能性があります。最終的には、そのメソッドを実行しようとすると、ロックされたオブジェクトを使用しているスレッドが停止しているため、スレッドがすべて返されないオブジェクトへのアクセスを待機するためです。 要点は理解できたと思いますが、ベースがずれている場合はお知らせください。そのコンセプトは私には理にかなっています。これが.NETで発生する可能性のある実際のシナリオであることを完全には確信していませんでした。これまで「ゾンビ」について聞いたことがありませんが、低レベルで深く作業したプログラマーは、コンピューティングの基礎(スレッド化など)をより深く理解する傾向があることを認識しています。しかし、私は確実にロックの価値を見ていますし、多くの世界クラスのプログラマーがロックを活用しているのを見てきました。また、私はこれを自分で評価する能力が限られています。これは、このlock(obj)ステートメントが本当に次の構文糖衣であることを知っているためです。 bool lockWasTaken = false; var temp = obj; try { Monitor.Enter(temp, ref lockWasTaken); { body } } finally { if (lockWasTaken) Monitor.Exit(temp); } そしてのでMonitor.EnterとMonitor.Exitマークされていますextern。.NETがこの種の影響を与える可能性のあるシステムコンポーネントへの暴露からスレッドを保護する何らかの処理を行うことは考えられるようですが、これは純粋に推測であり、おそらく「ゾンビスレッド」について聞いたことがないという事実に基づいているだけです。前。だから、私はこれについてここでいくつかのフィードバックを得ることができることを望んでいます: ここで説明したものよりも「ゾンビスレッド」の明確な定義はありますか? ゾンビスレッドは.NETで発生しますか?(なぜ/なぜそうではないのですか?) 該当する場合、.NETでゾンビスレッドの作成を強制するにはどうすればよいですか? 該当する場合、.NETでゾンビスレッドのシナリオを危険にさらすことなくロックを活用するにはどうすればよいですか? 更新 私は2年以上前にこの質問をしました。今日これが起こりました:

9
std :: promiseとは何ですか?
私はC ++ 11にかなり精通していますstd::thread、std::asyncとstd::futureの構成要素(例えば参照この回答)ストレートフォワードです。 でも、なんだかよくわからない std::promise、何をする、どのような状況で最適に使用されるは。標準のドキュメント自体には、クラスの概要以外の多くの情報は含まれていません。また、単に:: threadも含まれていません。 誰かstd::promiseが必要であり、それが最も慣用的な解決策である状況の簡潔で簡潔な例を誰かに教えてもらえますか?

13
ハンドラーvs AsyncTask vsスレッド[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 10か月前に閉鎖。 私は少しの違いについて混乱してしまったHandlers、AsyncTaskとThreadsのAndroidインチ StackOverflowでかなりの数のブログと質問を読みました。 HandlerUIと通信するためのバックグラウンドスレッドです。たとえば、進行状況バーの更新はを介して行う必要がありますHandler。ハンドラーを使用すると、の利点が得MessagingQueuesられるため、メッセージをスケジュールしたり、複数のUI要素を更新したり、タスクを繰り返し実行したりする場合に役立ちます。 AsyncTaskは似ていますがHandler、実際にはを使用しますが、UIスレッドでは実行されないため、データのフェッチ(Webサービスのフェッチなど)に適しています。後でUIを操作できます。 Threadただし、UIと対話できず、より「基本的な」スレッドを提供し、のすべての抽象化を見逃しますAsyncTask。 ただし、ソケット接続を実行したいのですが。これはハンドラーまたはスレッドで実行する必要がありAsyncTaskますか?UIの操作はまったく必要ありません。使用するパフォーマンスの点で違いはありますか? 一方、ドキュメントは大幅に改善されました。

22
Javaで同期(これ)を避けますか?
Javaの同期についての質問がSOに出てくるときはいつでも、synchronized(this)避けなければならないことを非常に熱心に指摘する人もいます。代わりに、プライベートリファレンスのロックが優先されると主張しています。 指定された理由のいくつかは次のとおりです。 いくつかの邪悪なコードがあなたのロックを盗む可能性があります(これは非常に人気があり、「偶然に」変種もあります) 同じクラス内のすべての同期されたメソッドは、まったく同じロックを使用するため、スループットが低下します (不必要に)情報を公開しすぎている 私を含む他の人々synchronized(this)は、それが(Javaライブラリーでも)よく使用されるイディオムであり、安全でよく理解されていると主張します。バグがあり、マルチスレッドプログラムで何が行われているかの手掛かりがないため、これを回避することはできません。つまり、該当する場合はそれを使用します。 私は、ロックオンを回避するthisことが望ましい場合に、ロックオンを回避することが望ましい実際の例(foobarのものではない)をいくつか見ることに興味synchronized(this)があります。 したがって、常に避けsynchronized(this)て、プライベートリファレンスのロックに置き換える必要がありますか? いくつかの詳細情報(回答が提供されると更新されます): インスタンスの同期について話している の暗黙的な(synchronizedメソッド)と明示的な形式のsynchronized(this)両方が考慮されます この件に関してBlochまたは他の当局を引用する場合は、好ましくない部分を省略しないでください(例:効果的なJava、スレッドセーフティの項目:通常はインスタンス自体のロックですが、例外があります)。 synchronized(this)提供以外の細かいロックが必要な場合synchronized(this)は適用されないため、問題はありません。

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

16
アプリケーションがメインスレッドで実行している作業が多すぎる可能性があります
Android SDK / API環境は初めてです。それは私がプロット/チャートを描こうとしている最初のものです。3種類の無料ライブラリを使用して、さまざまな種類のサンプルコードをエミュレータで実行してみましたが、レイアウト画面には何も表示されません。logcatは次のメッセージを繰り返しています。 W / Trace(1378):nativeGetEnabledTagsからの予期しない値:0 I / Choreographer(1378):55フレームをスキップしました!アプリケーションがメインスレッドで実行している作業が多すぎる可能性があります。 問題が解決せず、ライセンスされたライブラリの評価版に関連するサンプルコードを実行したときにグラフが機能しました。

8
タスクとスレッドの違いは何ですか?
C#4.0ではTask、System.Threading.Tasks名前空間にあります。間の真の違いは何であるThreadとはTask。私は自分で学ぶためにいくつかのサンプルプログラム(MSDNから取ったヘルプ)をしました Parallel.Invoke Parallel.For Parallel.ForEach しかし、アイデアがあまり明確ではないため、多くの疑問があります。 Stackoverflowで同様の種類の質問を最初に検索しましたが、この質問のタイトルでは同じ結果を得ることができなかった可能性があります。同じ種類の質問が以前にここに投稿されていることを誰かが知っている場合は、リンクのリファレンスを提供してください。

26
Java:notify()とnotifyAll()の繰り返し
StackаэтотвопросестьответынаStack Overflowнарусском:notifyчемотличиеnotify、notifyall? もし「の違いのための1つのグーグルnotify()とnotifyAll()」その後の説明の多くは、(離れてjavadocの段落を残して)ポップアップ表示されます。すべては、ウェイクアップされる待機中のスレッドの数に要約さnotify()れnotifyAll()ます。 ただし(これらの方法の違いを正しく理解している場合)、さらにモニターを取得するために常に1つのスレッドのみが選択されます。最初のケースではVMによって選択されたもの、2番目のケースではシステムスレッドスケジューラによって選択されたもの。それらの両方の正確な選択手順(一般的な場合)は、プログラマにはわかりません。 何に有用との違いは、通知()とのnotifyAll() 、その後?何か不足していますか?

14
Linuxでのpthread_createへの未定義の参照
https://computing.llnl.gov/tutorials/pthreads/から次のデモをWebから入手しました。 #include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { long tid; tid = (long)threadid; printf("Hello World! It's me, thread #%ld!\n", tid); pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc; long t; for(t=0; t<NUM_THREADS; t++){ printf("In main: creating thread %ld\n", t); rc = …




11
定義された間隔でAndroidでRunnableスレッドを実行する方法は?
Androidエミュレータの画面に、定義された間隔でテキストを表示するアプリケーションを開発しました。私はHandlerクラスを使用しています。これが私のコードのスニペットです: handler = new Handler(); Runnable r = new Runnable() { public void run() { tv.append("Hello World"); } }; handler.postDelayed(r, 1000); このアプリケーションを実行すると、テキストが1回だけ表示されます。どうして?


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