問題タブ [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.
for-loop - 別の関数に入れずに for ループを go ルーチンとして実行する方法はありますか
for ループの実行を設定したいが、実行をブロックしたくないとしましょう。明らかに、for ループを関数に入れてf
呼び出しgo f
て、自分の人生を続けることができますが、直接
呼び出す方法があるかどうか興味がありましたgo for
、 何かのようなもの:
concurrency - Go 言語でのクリティカル セクションの代替実行
私は2つのゴールーチンを持っています:
これらのルーチンのクリティカル セクションが常に交互に実行されるようにする適切な方法は何ですか?
つまり、CS1 は CS2 の後にのみ実行する必要があり、その逆も同様です: CS1、CS2、CS1、CS2、CS1 など。
go - プログラム/ゴルーチンをブロックするにはどうすればよいですか?
バックグラウンドでサービスを提供する 2 つのゴルーチンを起動するプログラムがあります。次に、メインのゴルーチンをブロックして、バックグラウンドで実行したいと考えています。「永久に」ブロックしたいのですが、クリーンな終了は気にしません。どうすればいいですか?私はチャンネルで待っていて、それから何も送信しないことができました. 私はループで眠ることができました。どちらもあまり正しくないと思います。もっと簡単なblock()
関数を呼び出すことができるのではないかと思いましたか?
私は現在これをやっています
go - gorouines はチャネルのバッファサイズを無視しますか?
環境: OS X 10.8、Go 1.0.2
buffer-size 2 でチャネルを作成し、チャネルを 3 回書き込むと、エラーがスローされます。
throw: すべてのゴルーチンがスリープ状態 - デッドロック!
もちろん、それは正しいです。
しかし、ゴルーチンで channel を 4 回以上書き込むと、正常に動作します。なぜですか? チャネルの容量は 2 ですが、ゴルーチンがそれを無視したり、容量の設定を忘れたりするのはなぜですか? read-channel コードにコメントを付けて、誰もチャネルを読み取って容量を節約しないようにします。また、time.Sleep を使用して、すべてのゴルーチンが作業を完了するのを待ちます。
次のコードを確認してください: パッケージ メイン
誰かヒットさせてくれませんか?みんなありがとう。
go - ゴルーチンを扱うときの奇妙なこと
2つの奇妙なことがあります。
スライスで 1000 個の数字を作成しましたが、246 しか表示されません。
「log.Println("hey")」という行を削除すると、なぜ 0 しか出力されないのですか?
同期の問題があるかもしれないことは知っていますが、これまで並行プログラムを作成したことがないので、推奨できる記事はありますか?
recursion - 不明な数のゴルーチンによって供給されるチャネルをブロック (および参加) するにはどうすればよいですか?
私は再帰関数を持っています。関数は、取得するデータに応じてさまざまな値で自分自身を呼び出すため、再帰のアリティと深さは不明です。各呼び出しは、自分自身を 0 回以上呼び出す可能性があります。この関数は、任意の数の値を返すことができます。
ゴルーチンとチャネルを関与させて並列化したいと考えています。の各再帰はinner
独自のゴルーチンで実行され、チャネルで値を返します。外側の関数は、これらの値を処理します。
この問題は、結果チャネル ループをエスケープするときに発生します。再帰の「形」(不明なアリティと深さ) のため、「n 個のイベント後に終了する」とは言えず、センチネル値を送信することもできません。
すべての再帰が発生して から戻るタイミングを検出するにはどうすればよいouter
ですか? これにアプローチするより良い方法はありますか?