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

コンピュータサイエンスでは、同時実行性は複数の計算を重複する期間で実行できるシステムの特性です。計算は、同じチップの複数のコアで実行されたり、同じプロセッサでプリエンプティブに時分割されたスレッドで実行されたり、物理的に分離されたプロセッサで実行されたりします。

2
UPDLOCK、HOLDLOCKについて混乱している
テーブルヒントの使用法を調査しているときに、次の2つの質問に遭遇しました。 どのロックヒントを使用する必要がありますか(T-SQL)? HOLDLOCKはUPDLOCKにどのような影響を及ぼしますか? 両方の質問への回答は、を使用すると(UPDLOCK, HOLDLOCK)、他のプロセスがそのテーブルのデータを読み取ることができないと言っていますが、私はこれを見ませんでした。テストするために、テーブルを作成し、2つのSSMSウィンドウを起動しました。最初のウィンドウから、さまざまなテーブルヒントを使用してテーブルから選択したトランザクションを実行しました。トランザクションの実行中に、2番目のウィンドウからさまざまなステートメントを実行して、どれがブロックされるかを確認しました。 テストテーブル: CREATE TABLE [dbo].[Test]( [ID] [int] IDENTITY(1,1) NOT NULL, [Value] [nvarchar](50) NULL, CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] SSMSウィンドウ1から: BEGIN TRANSACTION SELECT …

2
アクターはスレッドと比較してどのように機能しますか?
俳優がどのように良いか短い説明がありますかスレッドと比較してか? スレッドをアクターと見なして他のスレッドにメッセージを送信することはできませんか?多少の違いはありますが、はっきりしていません。スレッドを別の方法で使用して、任意の言語でアクターを使用できますか?

9
Node.jsまたはErlang
処理できる並行性レベルに関しては、これらのツールが本当に気に入っています。 Erlang / OTPははるかに安定したソリューションのように見えますが、関数型言語のパラダイムについてさらに多くの学習と多くの知識が必要です。そして、マルチコアCPUに関しては、Erlang / OTPの方がはるかに優れているようです(間違っている場合は訂正してください)。 しかし、どちらを選ぶべきですか?短期的および長期的な観点からどちらが優れていますか? 私の目標は、高負荷でのWebプロジェクトのスケーリングを従来の言語よりも簡単にするツールを学ぶことです。

13
確実にデッドロックに陥るプログラムを書く[クローズ]
クローズ。この質問はもっと焦点を合わせる必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てるようにします。 5年前に閉鎖されました。 この質問を改善する 私は最近、この質問を面接で尋ねました。 インターリーブがうまくいかないとデッドロックが発生すると答えましたが、インタビュアーはインターリーブに関係なく常にデッドロックになるプログラムを書くことができると主張しました。 そのようなプログラムを書くことはできますか?そのようなサンプルプログラムを教えていただけますか?

8
いくつかの先物を待つ方法は?
いくつかの先物があり、それらのいずれかが失敗するか、すべてが成功するまで待つ必要があるとします。 たとえば:3つの先物がありましょうf1、f2、f3。 場合はf1成功し、f2失敗した私は待たないf3(と返す失敗をクライアントに)。 実行中にf2失敗しf1、f3まだ実行中の場合、私はそれらを待ちません(そして失敗を返します) f1成功してからf2成功した場合、私は待ち続けf3ます。 どのように実装しますか?

2
runtime.Goschedは正確に何をしますか?
でツアーゴーのウェブサイトの行く1.5のリリースに先立って、バージョン、コードの一部があることを次のようになります。 package main import ( "fmt" "runtime" ) func say(s string) { for i := 0; i < 5; i++ { runtime.Gosched() fmt.Println(s) } } func main() { go say("world") say("hello") } 出力は次のようになります。 hello world hello world hello world hello world hello 私を悩ませているのは、runtime.Gosched()削除されると、プログラムが「ワールド」を出力しなくなることです。 hello hello hello hello hello どうしてこんなことに?runtime.Gosched()実行にどのように影響しますか?
86 concurrency  go 

7
Java:特定のキューサイズの後に送信をブロックするExecutorService
単一のスレッドが並行して実行できるI / O集約型タスクを生成するソリューションをコーディングしようとしています。各タスクには、重要なメモリ内データがあります。そのため、現在保留中のタスクの数を制限できるようにしたいと思います。 このようにThreadPoolExecutorを作成すると、次のようになります。 ThreadPoolExecutor executor = new ThreadPoolExecutor(numWorkerThreads, numWorkerThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(maxQueue)); 次に、キューがいっぱいになり、すべてのスレッドがすでにビジー状態になるとexecutor.submit(callable)スローさRejectedExecutionExceptionれます。 executor.submit(callable)キューがいっぱいですべてのスレッドがビジーのときにブロックを作成するにはどうすればよいですか? 編集:私はこれを試しました: executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); そして、それは私が達成したい効果をいくらか達成しますが、エレガントではありません(基本的に拒否されたスレッドは呼び出しスレッドで実行されるため、呼び出しスレッドがそれ以上送信するのをブロックします)。 編集:(質問をしてから5年後) この質問とその回答を読んでいる人には、受け入れられた回答を1つの正しい解決策と見なさないでください。すべての回答とコメントをお読みください。


5
並行辞書正しい使用法
私はこれが並行辞書の正しい使用法であると考えるのは正しいですか private ConcurrentDictionary<int,long> myDic = new ConcurrentDictionary<int,long>(); //Main thread at program startup for(int i = 0; i < 4; i++) { myDic.Add(i, 0); } //Seperate threads use this to update a value myDic[InputID] = newLongValue; ロックなどがなく、複数のスレッドが同じことを行おうとしている場合でも、辞書の値を更新しているだけです。


2
Kotlinに同時実行キーワードがないのはなぜですか?
同期/並行性のキーワードがないのはなぜですか? これまでのところ、私の調査では1つの解決策が得られました。いくつかの高レベルのクラスをラップし、それらを使用して並行性を処理します。 純粋なKotlinでのプロジェクトを考えると、並行性などを処理する高度に最適化された小さなコンポーネントが必要な場合はどうすればよいでしょうか。 私の印象では、KotlinはJavaの支援言語であり、コードの90%をKotlinで記述しますが、Kotlinでは表現できないJavaコードがいくつかあります。 これは正解?これは意図された方法ですか?

4
ゴルーチンからの戻り値のキャッチ
以下のコードは、「予期しない実行」というコンパイルエラーを示します。 x := go doSomething(arg) func doSomething(arg int) int{ ... return my_int_value } goroutineを使用せずに、関数を正常に呼び出すと、戻り値をフェッチできることはわかっています。または、チャンネルなどを使用できます。 私の質問は、なぜこのような戻り値をゴルーチンからフェッチできないのかということです。

6
take()でブロックしているBlockingQueueに割り込む方法は?
からオブジェクトをBlockingQueue取得take()し、連続ループで呼び出すことによってそれらを処理するクラスがあります。ある時点で、これ以上オブジェクトがキューに追加されないことがわかりました。take()メソッドを中断してブロックを停止するにはどうすればよいですか? オブジェクトを処理するクラスは次のとおりです。 public class MyObjHandler implements Runnable { private final BlockingQueue<MyObj> queue; public class MyObjHandler(BlockingQueue queue) { this.queue = queue; } public void run() { try { while (true) { MyObj obj = queue.take(); // process obj here // ... } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } …

5
Pythonマルチプロセッシングを使用した驚異的並列問題の解決
マルチプロセッシングを使用して、驚異的並列問題にどのように取り組むのですか? 驚異的並列問題は通常、次の3つの基本的な部分で構成されます。 入力データを読み取ります(ファイル、データベース、tcp接続などから)。 入力データに対して計算を実行します。各計算は他の計算から独立しています。 計算結果を(ファイル、データベース、tcp接続などに)書き込みます。 プログラムを2次元で並列化できます。 各計算は独立しているため、パート2は複数のコアで実行できます。処理の順序は関係ありません。 各パーツは独立して実行できます。パート1はデータを入力キューに配置し、パート2はデータを入力キューからプルして結果を出力キューに配置し、パート3は結果を出力キューからプルして出力することができます。 これは並行プログラミングの最も基本的なパターンのようですが、それを解決しようとするとまだ迷っています。そこで、マルチプロセッシングを使用してこれがどのように行われるかを示す標準的な例を書いてみましょう。 問題の例を次に示します。入力として整数の行を含むCSVファイルが与えられた場合、それらの合計を計算します。問題を3つの部分に分けます。これらはすべて、並行して実行できます。 入力ファイルを生データ(整数のリスト/反復可能ファイル)に処理します データの合計を並行して計算します 合計を出力します 以下は、これら3つのタスクを解決する従来の単一プロセスバインドPythonプログラムです。 #!/usr/bin/env python # -*- coding: UTF-8 -*- # basicsums.py """A program that reads integer values from a CSV file and writes out their sums to another CSV file. """ import csv import optparse import sys def …

10
Django:データベースエントリの同時変更から保護するにはどうすればよいですか?
2人以上のユーザーによる同じデータベースエントリの同時変更から保護する方法はありますか? 2番目のコミット/保存操作を実行しているユーザーにエラーメッセージを表示することは許容されますが、データを黙って上書きしないでください。 ユーザーが「戻る」ボタンを使用するか、単にブラウザを閉じて、ロックを永久に残す可能性があるため、エントリをロックすることはオプションではないと思います。

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