問題タブ [goroutine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
4840 参照

go - 指定された数のゴルーチンが作成するスレッドの数を検出できますか?

goroutine は複数の OS スレッドに多重化されているため、I/O の待機中などに 1 つがブロックされても、他のスレッドは引き続き実行されることを理解しています。しかし、n個のゴルーチンを作成した場合に生成されるスレッドの数を事前に知る方法はありますか?

たとえば、以下の関数を呼び出すと、n 個のゴルーチンに対して作成されるシステム スレッドの数 (または最大数) がわかります。

0 投票する
2 に答える
2306 参照

go - コルーチンと「goto」の違いは?

私はいつも「goto」の恐ろしいことについて読んでいます。しかし、今日、Google プログラミング言語Goについて読んでみると、それがコルーチン (ゴルーチン) をサポートしていることがわかります。

質問は:

または

なんで?

0 投票する
3 に答える
4254 参照

go - 共有メモリ対 Go チャネル通信

Go のスローガンの 1 つは、メモリを共有して通信しないでください。代わりに、通信によってメモリを共有します

私は、Go が同じマシン上で実行されている 2 つの異なる Go コンパイル済みバイナリを相互に通信できるようにするかどうか (つまり、クライアント サーバー) と、C++ の boost::interprocess と比較してどれくらい高速になるかを考えています。これまで見てきたすべての例は、同じプログラム ルーチン間の通信を示しているだけです。

シンプルな Go の例 (個別のクライアント コードとサーバー コードを使用) をいただければ幸いです。

0 投票する
3 に答える
6920 参照

go - ブロックせずに、ゴルーチンが完了したかどうかを確認するにはどうすればよいですか?

これまでに見たすべての例では、(<-chan演算子を介して) 結果を取得するためのブロックが含まれています。

私の現在のアプローチには、ポインタを構造体に渡すことが含まれます。

完了時にゴルーチンが書き込みます。次に、都合の良いときにいつでもチェックするのは簡単なことですfinished。より良い代替手段はありますか?

私が本当に目指しているのは、Qt スタイルのシグナルスロット システムです。私は解決策がほとんど些細なことに見えると思っています ( chans には未踏の可能性がたくさんあります) が、私はまだそれを理解するのに十分な言語に精通していません.

0 投票する
4 に答える
825 参照

parallel-processing - ゴルーチンの最小作業サイズ

ゴルーチンが有益であるために必要な最小作業サイズをおおよそ知っている人はいますか (作業をオフロードするための空きコアがあると仮定して)?

0 投票する
2 に答える
437 参照

concurrency - Goにある多数のゴルーチンの1つから結果を受け取ることは可能ですか?

私は最近、Googleのプログラミング言語であるGoについて学びました。私は、並行性のサポートが提供されていることに興味をそそられ、それについてさらに学ぶことに着手しました。しかし、私はGoが並行性の特定の機能をどのように実装しているかを見に行きました。これまでのところ、この機能がまったく存在しないという証拠はまったく見ていません。

これが架空の状況です。特定の入力のFoo値を決定する関数をプログラミングしていると仮定します。任意の入力について、Foo値はドメインAまたはドメインB(両方ではない)のいずれかにあります。これらのドメインでの検索の手法はまったく異なりますが、成功した検索はすぐに返される傾向があり、失敗した検索はデータセット全体を調べて網羅する必要があるため、時間がかかるという特性を共有しています。

さて、並行性を採用する他の言語(Cilkなど)では、関数Foosearchをプログラムして、Asearch関数とBsearch関数を生成することができます。これらの関数は同時に実行され、どちらかが答えを見つけたときはいつでも、その答えは呼び出し元の関数Foosearchに報告され、関数Foosearchは、生成された関数が返されなかった場合は終了します。

ただし、Goのゴルーチンでは、チャネルに接続できるルーチンは2つだけのようです。そのため、どちらが最初に回答を見つけたかに応じて、AsearchまたはBsearchのどちらかが送信できるチャネルを設定できず、Foosearchに読み取りを依頼できませんでした。それ。また、チャネルをブロックせずに読み取ることはできないようです。そのため、FoosearchでAsearchとBsearchを開始し、両方からチャネルを設定してから、ループで実行して、どちらかが生成されたかどうかを確認することはできませんでした。答え。

Goの並行性の限界についての私の理解は正しいですか?与えられた結果を達成する別の方法はありますか?

0 投票する
3 に答える
971 参照

java - Go や Java がユーザー空間スレッドを使用しているということは、マルチコアを実際に活用できないということではないでしょうか。

最近、オペレーティング システムのクラスでスレッドについて頻繁に話し合っていますが、1 つの疑問が頭に浮かびました。

Go (および Java) はカーネル スレッドの代わりにユーザー空間スレッドを使用するため、OS はスレッド自体ではなくプロセスにのみ CPU 時間を割り当てるため、複数のコアを効果的に利用できないということではないでしょうか?

これはあなたができないという事実を確認するようです

ウィキペディアもそう考えているようです

0 投票する
12 に答える
353983 参照

java - Java でメソッドを非同期に呼び出す方法

私は最近、 Go のゴルーチンを見ていて、Java に似たようなものがあるといいなと思いました。メソッド呼び出しを並列化する一般的な方法を検索した限り、次のようなことを行います。

それはあまりエレガントではありません。これを行うより良い方法はありますか?プロジェクトでそのようなソリューションが必要だったので、非同期メソッド呼び出しの周りに独自のラッパー クラスを実装することにしました。

J-Goでラッパー クラスを公開しました。しかし、それが良い解決策かどうかはわかりません。使い方は簡単です:

以下の詳細:

内部的には、Runnable を実装するクラスを使用し、いくつかのリフレクション作業を行って正しいメソッド オブジェクトを取得し、それを呼び出しています。

私の小さなライブラリと、Java でこのような非同期メソッド呼び出しを行うことについて意見が欲しいです。安全ですか?もっと簡単な方法はすでにありますか?

0 投票する
2 に答える
1898 参照

go - ゴルーチンを同じスレッドに強制する

ゴルーチンが特定の OS スレッドでのみ実行されるようにする方法はありますか? たとえば、GUI 操作を GUI スレッドで実行する必要があるが、GUI コードを実行するゴルーチンが複数ある場合などです。

GOMAXPROCS(1)技術的には仕事をしますが、それはマルチスレッドの目的を無効にします。

LockOSThread()も機能しますが、そのスレッドで他のゴルーチンも実行できなくなります。

これを行う方法はありますか、または同じスレッドを必要とするすべてのものも同じゴルーチンで実行する必要がありますか?

0 投票する
2 に答える
6526 参照

multithreading - goマップ構造はスレッドセーフですか?

Goマップタイプはスレッドセーフですか? マップタイプの読み取りと書き込みを行う多くのゴルーチンを持つプログラムがあります。保護メカニズムを実装する必要がある場合、最善の方法は何ですか?