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

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

5
サーブレットベースのWebアプリケーションでバックグラウンドタスクを実行する方法
Javaを使用していて、アプリケーションでサーブレットを継続的に実行したいのですが、方法がわかりません。私のサーブレットには、データベース全体からのユーザーの合計数だけでなく、データベースからのユーザー数を毎日提供するメソッドがあります。そのため、サーブレットを継続して実行したいと考えています。

9
なぜi ++はアトミックではないのですか?
なぜi++Javaではアトミックではないのですか? Javaを少し深くするために、スレッド内のループが実行される頻度を数えようとしました。 だから私は private static int total = 0; メインクラスで。 2つのスレッドがあります。 スレッド1:プリント System.out.println("Hello from Thread 1!"); スレッド2:プリント System.out.println("Hello from Thread 2!"); そして、スレッド1とスレッド2によって印刷された行を数えますが、スレッド1の行+スレッド2の行は、印刷された行の総数と一致しません。 これが私のコードです: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; public class Test { private static int total = 0; private static int countT1 = 0; private static int …

5
C#タイマーは別のスレッドで経過しますか?
System.Timers.Timerは、それを作成したスレッドとは別のスレッドで経過しますか? 5秒ごとに起動するタイマーを備えたクラスがあるとします。タイマーが作動すると、elapsedメソッドで、一部のオブジェクトが変更されます。このオブジェクトを変更するのに10秒のように長い時間がかかるとしましょう。このシナリオでスレッドの衝突が発生する可能性はありますか?

4
別のスレッドで実行されているiphone ios
別のスレッドでコードを実行する最良の方法は何ですか?それは...ですか: [NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL]; または: NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doStuff:) object:nil; [queue addOperation:operation]; [operation release]; [queue release]; 私は2番目の方法を行っていますが、私が読んでいるウェズリークックブックでは最初の方法を使用しています。

11
java.lang.OutOfMemoryError:Javaヒープスペース
マルチスレッドプログラムの実行時に次のエラーが発生する java.lang.OutOfMemoryError: Java heap space 上記のエラーは、いずれかのスレッドで発生しました。 私の知る限りでは、ヒープ領域はインスタンス変数のみによって占有されています。これが正しい場合、オブジェクトの作成時にインスタンス変数用のスペースが割り当てられるため、しばらくの間正常に実行した後にこのエラーが発生した理由。 ヒープ領域を増やす方法はありますか? ヒープ領域を少なくするために、プログラムにどのような変更を加える必要がありますか?

3
Android AsyncTaskスレッドの制限?
ユーザーがシステムにログインするたびに情報を更新する必要があるアプリケーションを開発しています。電話のデータベースも使用しています。これらすべての操作(更新、dbからのデータの取得など)には、非同期タスクを使用します。これまで、なぜそれらを使用すべきでないのかわかりませんでしたが、最近、いくつかの操作を実行すると、非同期タスクの一部が実行前に停止し、doInBackgroundにジャンプしないことがわかりました。それはあまりにも奇妙で、そのままにしておくことはできなかったので、何が問題かを確認するだけの簡単なアプリケーションをもう1つ開発しました。そして奇妙なことに、非同期タスクの総数が5に達したときにも同じ動作が発生し、6番目のタスクは実行前に停止します。 Androidのアクティビティ/アプリでのasyncTasksの制限はありますか?または、それは単なるバグであり、報告する必要がありますか?誰かが同じ問題を経験し、おそらくそれに対する回避策を見つけましたか? これがコードです: バックグラウンドで機能するこれらのスレッドを5つ作成するだけです。 private class LongAsync extends AsyncTask<String, Void, String> { @Override protected void onPreExecute() { Log.d("TestBug","onPreExecute"); isRunning = true; } @Override protected String doInBackground(String... params) { Log.d("TestBug","doInBackground"); while (isRunning) { } return null; } @Override protected void onPostExecute(String result) { Log.d("TestBug","onPostExecute"); } } そして、このスレッドを作成します。preExecuteに入り、ハングします(doInBackgroundには移動しません)。 private class TestBug extends …

7
静的変数はスレッド間で共有されますか?
スレッドの上級Javaクラスの私の先生は、私にはわからないことを言っていました。 彼は、以下のコードは必ずしもready変数を更新するとは限らないと述べた。彼によると、特に各スレッド(メインスレッドとReaderThread)が独自のプロセッサで実行されているため、2つのスレッドが必ずしも静的変数を共有していないため、同じレジスタ/キャッシュ/ etcと1つのCPUを共有していない他を更新しません。 基本的readyに、メインスレッドで更新される可能性はありますが、では更新されない可能性があるReaderThreadため、ReaderThread無限にループします。 彼はまた、プログラムが0またはを印刷することは可能であると主張した42。どの42ように印刷できるか理解していますが、できません0。彼numberは、変数がデフォルト値に設定されている場合にこれが当てはまるだろうと述べました。 静的変数がスレッド間で更新されることが保証されていないのではないかと思ったのですが、これはJavaにとって非常に奇妙な印象を受けます。ready揮発性にすることでこの問題は修正されますか? 彼はこのコードを示しました: public class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends Thread { public void run() { while (!ready) Thread.yield(); System.out.println(number); } } public static void main(String[] args) { new ReaderThread().start(); number = 42; ready = true; …

3
Pythonはマルチスレッドをサポートしていますか?実行時間を短縮できますか?
Pythonでマルチスレッドが機能するかどうかについて少し混乱しています。 私はこれについて多くの質問があり、それらの多くを読んだことを知っていますが、私はまだ混乱しています。私は自分の経験から知っており、他の人が自分の答えと例をここでStackOverflowに投稿して、マルチスレッドが実際にPythonで可能であることを確認しました。では、なぜPythonはGILによってロックされており、一度に1つのスレッドしか実行できないと誰もが言い続けるのはなぜでしょうか。それは明らかに機能します。または私がここに来ていないいくつかの違いはありますか? 多くのポスター/回答者は、複数のコアを使用しないため、スレッド化が制限されていることについても言及し続けます。しかし、それらは同時に機能するため、組み合わせたワークロードをより高速に実行できるため、依然として有用です。それ以外の理由でPythonスレッドモジュールが存在するのはなぜですか? 更新: これまでのすべての答えをありがとう。私が理解している方法では、マルチスレッドは一部のIOタスクに対してのみ並列実行されますが、CPUにバインドされた複数のコアタスクに対しては一度に1つしか実行できません。 これが実際に何を意味するのかは完全にはわかりませんので、マルチスレッドにしたい種類のタスクの例を示します。たとえば、文字列の非常に長いリストをループして、各リストアイテムに対して基本的な文字列操作を実行したいとします。リストを分割し、各サブリストをループ/文字列コードで処理するために新しいスレッドで送信し、結果をキューに送信すると、これらのワークロードはほぼ同時に実行されますか?最も重要なことは、これは理論的にスクリプトの実行にかかる時間を短縮することですか? 別の例としては、4つの異なるスレッドでPILを使用して4つの異なる画像をレンダリングおよび保存でき、画像を1つずつ処理するよりも速いですか?この速度の要素は、正しい用語が何であるかではなく、私が本当に疑問に思っていることだと思います。 マルチプロセッシングモジュールについても知っていますが、今の私の主な関心は小中規模のタスクロード(10〜30秒)であり、サブプロセスの開始が遅くなる可能性があるため、マルチスレッド化の方が適していると思います。

3
WPFで安全にUI(メイン)スレッドにアクセスする
次の方法で、監視しているログファイルが更新されるたびに(新しいテキストが追加されて)データグリッドを更新するアプリケーションがあります。 private void DGAddRow(string name, FunctionType ft) { ASCIIEncoding ascii = new ASCIIEncoding(); CommDGDataSource ds = new CommDGDataSource(); int position = 0; string[] data_split = ft.Data.Split(' '); foreach (AttributeType at in ft.Types) { if (at.IsAddress) { ds.Source = HexString2Ascii(data_split[position]); ds.Destination = HexString2Ascii(data_split[position+1]); break; } else { position += at.Size; } …

12
CoreData:警告:指定されたクラスをロードできません
Xcode 6.1を使用して、既存のObjective-C TV Showアプリを新しいSwiftバージョンに複製していますが、CoreDataに問題があります。 4つのエンティティのモデルを作成し、それらのNSManagedObjectサブクラスを(Swiftで)作成しました。すべてのファイルに適切なアプリターゲットセット(「ソースのコンパイル」用)があります。 新しいエンティティを挿入しようとすると、このエラーが発生します。 CoreData:警告:エンティティ 'Shows'の 'Shows'という名前のクラスをロードできません。クラスが見つかりません。代わりにデフォルトのNSManagedObjectを使用します。 いくつかのコメント: Core Dataに保存するとき、私は親子コンテキストの方法を使用してバックグラウンドスレッドを許可します。これを行うには、次を使用してManagedObjectContextを設定します。 lazy var managedObjectContext: NSManagedObjectContext? = { // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that …


6
Pythonでマルチプロセッシングキューを使用するにはどうすればよいですか?
マルチプロセッシングキューがPythonでどのように機能し、どのように実装するかを理解しようとすると、非常に苦労します。共有ファイルからデータにアクセスする2つのPythonモジュールがあるとしましょう。これらの2つのモジュールを、ライターとリーダーと呼びましょう。私の計画では、リーダーとライターの両方がリクエストを2つの別々のマルチプロセッシングキューに入れ、3番目のプロセスがこれらのリクエストをループでポップしてそのように実行するようにします。 私の主な問題は、multiprocessing.queueを正しく実装する方法が本当にわからないことです。プロセスごとにオブジェクトが個別のキューになるため、実際にインスタンス化することはできません。すべてのプロセスが共有キューに関連していることをどのように確認しますか(またはこの場合、キュー)

6
アクティブな例外なしで呼び出されたC ++終了
スレッドでC ++エラーが発生します: terminate called without an active exception Aborted コードは次のとおりです。 #include <queue> #include <thread> #include <mutex> #include <condition_variable> template<typename TYPE> class blocking_stream { public: blocking_stream(size_t max_buffer_size_) : max_buffer_size(max_buffer_size_) { } //PUSH data into the buffer blocking_stream &operator<<(TYPE &other) { std::unique_lock<std::mutex> mtx_lock(mtx); while(buffer.size()>=max_buffer_size) stop_if_full.wait(mtx_lock); buffer.push(std::move(other)); mtx_lock.unlock(); stop_if_empty.notify_one(); return *this; } //POP …

3
SemaphoreSlimの使用法を理解する必要があります
これが私が持っているコードですが、何SemaphoreSlimをしているのかわかりません。 async Task WorkerMainAsync() { SemaphoreSlim ss = new SemaphoreSlim(10); List<Task> trackedTasks = new List<Task>(); while (DoMore()) { await ss.WaitAsync(); trackedTasks.Add(Task.Run(() => { DoPollingThenWorkAsync(); ss.Release(); })); } await Task.WhenAll(trackedTasks); } void DoPollingThenWorkAsync() { var msg = Poll(); if (msg != null) { Thread.Sleep(2000); // process the long running CPU-bound job …

3
FixedThreadPoolとCachedThreadPool:2つの悪の小さい方
たくさんのタスクを実行するスレッド(約5〜150)を生成するプログラムがあります。もともと、私が使用しFixedThreadPoolているため、この類似した質問は、彼らがより良い、より長い寿命のタスクに適した提案とマルチスレッドの私の非常に限られた知識で、私は、スレッド(数分)の平均寿命は「とみなさ長く住んでいました」。 ただし、最近、追加のスレッドを生成する機能を追加しました。これにより、設定したスレッド制限を超えてしまいます。この場合、許可できるスレッドの数を推測して増やすか、スレッドをCachedThreadPool無駄にしないように切り替える方が良いでしょうか? 両方試してみて、違いはないようですのでCachedThreadPool、ムダを避けるためだけに行きたいと思います。ただし、スレッドの寿命は、代わりにを選択FixedThreadPoolして未使用のスレッドを処理する必要があることを意味しますか?この質問では、これらの余分なスレッドが無駄になっていないように見えますが、明確にしていただければ幸いです。

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