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

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

4
Javaでの揮発性と同期の違い
変数をJava として宣言することとvolatile、常にsynchronized(this)ブロック内の変数にアクセスすることの違いに疑問を感じていますか? この記事http://www.javamex.com/tutorials/synchronization_volatile.shtmlによると、言うべきことがたくさんあり、多くの違いがありますが、いくつかの類似点もあります。 私はこの情報に特に興味があります: ... 揮発性変数へのアクセスがブロックする可能性は決してありません。単純な読み取りまたは書き込みを行うだけなので、同期ブロックとは異なり、ロックを保持することはありません。 volatile変数にアクセスしてもロックは保持されないため、アトミック操作として読み取り、更新、書き込みを行う場合には適していません(「更新を見逃す」準備ができていない限り)。 read-update-writeとはどういう意味ですか?書き込みも更新ではないのですか、それとも単に更新が読み取りに依存する書き込みであることを意味していますか? 何volatileよりも、synchronizedブロックを介して変数にアクセスするよりも、変数を宣言する方が適しているのはいつですか。volatile入力に依存する変数に使用するのは良い考えですか?たとえばrender、レンダリングループを通じて読み取られ、keypressイベントによって設定されるという変数がありますか?



12
マルチプロセッシングPool.map()を使用すると、<type 'instancemethod'>をピクルできません
multiprocessingのPool.map()機能を使用して、作業を同時に分割しようとしています。次のコードを使用すると、正常に動作します。 import multiprocessing def f(x): return x*x def go(): pool = multiprocessing.Pool(processes=4) print pool.map(f, range(10)) if __name__== '__main__' : go() ただし、よりオブジェクト指向のアプローチで使用すると、機能しません。表示されるエラーメッセージは次のとおりです。 PicklingError: Can't pickle &lt;type 'instancemethod'&gt;: attribute lookup __builtin__.instancemethod failed これは、以下が私のメインプログラムである場合に発生します。 import someClass if __name__== '__main__' : sc = someClass.someClass() sc.go() そして以下は私のsomeClassクラスです: import multiprocessing class someClass(object): def __init__(self): pass def …

7
Node.jsに対するHaskellの応答とは何ですか?
Erlangコミュニティは、非ブロッキングI / Oをネイティブで実行し、デプロイメントを複数のプロセッサー(Node.jsに組み込まれていないもの)まで簡単に拡張できる方法があるため、Node.jsにうらやましくないと思います。詳細については、http://journal.dedasys.com/2010/04/29/erlang-vs-node-jsおよびNode.jsまたはErlangをご覧ください。 ハスケルはどうですか?HaskellはNode.jsのいくつかの利点、つまりマルチスレッドプログラミングに頼ることなくI / Oのブロックを回避するクリーンなソリューションを提供できますか? Node.jsには魅力的なものがたくさんあります イベント:スレッド操作はありません。プログラマーはコールバックのみを提供します(Snapフレームワークの場合と同様)。 コールバックは単一のスレッドで実行されることが保証されており、競合状態は発生しません。 素晴らしくシンプルなUNIXフレンドリーなAPI。ボーナス:優れたHTTPサポート。DNSも利用できます。 すべてのI / Oはデフォルトで非同期です。これにより、ロックを回避しやすくなります。ただし、コールバックでのCPU処理が多すぎると、他の接続に影響します(この場合、タスクはより小さなサブタスクに分割され、再スケジュールされます)。 クライアント側とサーバー側で同じ言語。(ただし、この例ではあまり価値を見ていません。jQueryとNode.jsはイベントプログラミングモデルを共有していますが、残りは大きく異なります。サーバー側とクライアント側の間でコードを共有する方法がわかりません。実際に役立つ。) これらすべてが1つの製品にパッケージ化されています。

5
UIスレッドでのタスクの継続
最初のタスクが作成されたスレッドでタスクの継続を実行するように指定する「標準」の方法はありますか? 現在、私は以下のコードを持っています-それは機能していますが、ディスパッチャーを追跡し、2番目のアクションを作成することは、不要なオーバーヘッドのように思えます。 dispatcher = Dispatcher.CurrentDispatcher; Task task = Task.Factory.StartNew(() =&gt; { DoLongRunningWork(); }); Task UITask= task.ContinueWith(() =&gt; { dispatcher.Invoke(new Action(() =&gt; { this.TextBlock1.Text = "Complete"; } });
214 c#  .net  wpf  multithreading  task 

12
Java ExecutorServiceタスクからの例外の処理
JavaのThreadPoolExecutorクラスを使用して、多数の重いタスクを一定数のスレッドで実行しようとしています。各タスクには、例外のために失敗する可能性のある多くの場所があります。 サブクラス化ThreadPoolExecutorしafterExecute、タスクの実行中に発生したキャッチされない例外を提供することになっているメソッドをオーバーライドしました。しかし、私はそれを機能させることができないようです。 例えば: public class ThreadPoolErrors extends ThreadPoolExecutor { public ThreadPoolErrors() { super( 1, // core threads 1, // max threads 1, // timeout TimeUnit.MINUTES, // timeout units new LinkedBlockingQueue&lt;Runnable&gt;() // work queue ); } protected void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); if(t != null) { System.out.println("Got an …



7
Javaで偽のウェイクアップが実際に起こりますか?
さまざまなロック関連の質問を見て、(ほとんど)常に「偽のウェイクアップのためにループ」という用語を見つけています1おそらく、誰かがそのようなウェイクアップを経験しましたか(たとえば、適切なハードウェア/ソフトウェア環境を想定しています)? 「スプリアス」という言葉には明らかな理由がないことを知っていますが、そのようなイベントの理由は何ですか? (1注:ループの実行については問いません。) 編集:ヘルパーの質問(コードサンプルが好きな人向け): 次のプログラムを実行している場合: public class Spurious { public static void main(String[] args) { Lock lock = new ReentrantLock(); Condition cond = lock.newCondition(); lock.lock(); try { try { cond.await(); System.out.println("Spurious wakeup!"); } catch (InterruptedException ex) { System.out.println("Just a regular interrupt."); } } finally { lock.unlock(); } } } awaitランダムなイベントを永遠に待つことなく、これを偽って目覚めるにはどうすればよいですか

15
Pythonの呼び出し側スレッドでスレッドの例外をキャッチする
私はPythonとマルチスレッドプログラミング全般に非常に慣れていません。基本的に、ファイルを別の場所にコピーするスクリプトがあります。これを別のスレッドに配置し....て、出力がスクリプトがまだ実行中であることを示すことができるようにしたいと思います。 私が抱えている問題は、ファイルをコピーできない場合に例外がスローされることです。これは、メインスレッドで実行している場合は問題ありません。ただし、次のコードを使用しても機能しません。 try: threadClass = TheThread(param1, param2, etc.) threadClass.start() ##### **Exception takes place here** except: print "Caught an exception" スレッドクラス自体で、例外を再スローしようとしましたが、機能しません。ここにいる人々が同様の質問をするのを見てきましたが、彼らはすべて私がやろうとしていることよりも具体的なことをしているようです(そして私は提供されるソリューションを完全に理解していません)。私は人々がの使用法について言及するのを見ましたsys.exc_info()が、それをどこでどのように使用するかわかりません。 すべての助けに大歓迎です! 編集:スレッドクラスのコードは以下のとおりです。 class TheThread(threading.Thread): def __init__(self, sourceFolder, destFolder): threading.Thread.__init__(self) self.sourceFolder = sourceFolder self.destFolder = destFolder def run(self): try: shul.copytree(self.sourceFolder, self.destFolder) except: raise

16
Java:System.exit()を呼び出すメソッドをテストする方法は?
System.exit()特定の入力を呼び出す必要があるいくつかのメソッドがあります。残念ながら、これらのケースをテストすると、JUnitが終了します。System.exit()現在のスレッドだけでなく、JVMを終了するため、メソッド呼び出しを新しいスレッドに配置しても効果がないようです。これに対処するための一般的なパターンはありますか?たとえば、スタブを代用できSystem.exit()ますか? [編集]問題のクラスは、実際には私がJUnit内でテストしようとしているコマンドラインツールです。たぶんJUnitは単に仕事に適したツールではありませんか?補完的な回帰テストツールの提案を歓迎します(できれば、JUnitやEclEmmaとうまく統合できるものが望ましい)。

10
Pythonスレッドでのjoin()の使用は何ですか?
私はpythonのスレッディングを研究していて、出会いましたjoin()。 作者は、スレッドがデーモンモードの場合、join()メインスレッドが終了する前にスレッドが終了できるように使用する必要があると述べました。 しかし、私は彼が使用しt.join()ていtなくても使用しているのを見ましたdaemon サンプルコードはこれです import threading import time import logging logging.basicConfig(level=logging.DEBUG, format='(%(threadName)-10s) %(message)s', ) def daemon(): logging.debug('Starting') time.sleep(2) logging.debug('Exiting') d = threading.Thread(name='daemon', target=daemon) d.setDaemon(True) def non_daemon(): logging.debug('Starting') logging.debug('Exiting') t = threading.Thread(name='non-daemon', target=non_daemon) d.start() t.start() d.join() t.join() t.join()デーモンではないので何を使うのか分からず、削除しても何も変わらない

14
ExecutorService、すべてのタスクが完了するまで待機する方法
すべてのタスクがExecutorService完了するのを待つ最も簡単な方法は何ですか?私のタスクは主に計算なので、コアごとに1つずつ、多数のジョブを実行したいだけです。現在、私のセットアップは次のようになります。 ExecutorService es = Executors.newFixedThreadPool(2); for (DataTable singleTable : uniquePhrases) { es.execute(new ComputeDTask(singleTable)); } try{ es.wait(); } catch (InterruptedException e){ e.printStackTrace(); } ComputeDTask実行可能を実装します。これはタスクを正しく実行するように見えますが、コードはでクラッシュwait()しIllegalMonitorStateExceptionます。これは奇妙です。私がおもちゃの例をいじってみたところ、動作するように見えました。 uniquePhrases数万の要素が含まれています。別の方法を使用する必要がありますか?できるだけシンプルなものを探しています

7
ExecutorServiceの送信とExecutorServiceの実行のどちらかを選択します
戻り値が気にならない場合、ExecutorServiceの submitまたはexecute のどちらを選択すればよいですか? 両方をテストした場合、戻り値以外は2つの間に違いはありませんでした。 ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.execute(new Task()); ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.submit(new Task());

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