問題タブ [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 投票する
1 に答える
5140 参照

go - Goで無限のゴルーチンを停止するより良い方法はありますか?

ゴルーチンを使用して単純なクロック信号を作成しました。

この時計が不正確であることは知っていますが、それは関係ありません。私が知りたいのは、このゴルーチンを停止する最良の方法は何ですか?

理想的には、チャネルのリスナーが範囲外になるとすぐに停止することを望んでいましたが、その方法を知っています (ガベージ コレクターに似ていますが、ゴルーチン用です)。私はそれを手動で停止する 2 つの方法を考え出しました: (1) そのようなすべてのゴルーチンがすべてのループをチェックするグローバルな停止変数を使用する方法と、(2) 停止チャネルを使用する方法です。これらのそれぞれの欠点は、ゴルーチンを手動で停止する必要があることです。

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

concurrency - go ルーチンの奇妙な動作

次のコードを試してみましたが、結果は少し奇妙に思えます。最初に奇数を出力し、次に偶数を出力します。私はそれについて本当に混乱しています。1、2、3、4... のように、奇数と偶数を次々に出力することを望んでいました。誰が私を助けることができます?

0 投票する
8 に答える
3759 参照

java - Clojure / Java のゴルーチンに相当するもの

私は最近、Go Concurrency patterns に関する Google IO トークを見て楽しんでいました。

同時実行性に対する Go のアプローチ (グラルーチン、チャネルを介した通信) は明らかに Clojure とは異なりますが (不変性、管理された参照、STM)、Clojure コンテキストの状況によっては、Go のアプローチが依然として有用であるように思われました。

Clojure または Java for Go の同時実行プリミティブ (おそらくライブラリ) には、特に次のようなものがあります。

  • channelリーダーとライターが両端で使用可能になるまでブロックするようなオブジェクト
  • select複数のチャネルで結果を待つことができる のような構造

PS Clojure から簡単に使用できるので、Java ソリューションに完全に満足しています。

UPDATE質問が最初に尋ねられたので、Clojureには、このすべての機能などを提供するcore.asyncが含まれるようになりました。

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

go - GoのPythonスタイルのジェネレーター

私は現在TourofGoに取り組んでおり、特に質問66では、ゴルーチンがPythonジェネレーターと同様に使用されていると思いました。66は複雑に見えると思ったので、次のように書き直しました。

これはうまくいくようです。いくつかの質問:

  1. チャネルのバッファサイズを10とすると、fibonacciさらに10個のスポットができるだけ早くいっぱいになりmain、スポットができるだけ早く使い果たされます。これは正しいですか?これは、メモリを犠牲にして1のバッファサイズよりもパフォーマンスが高くなりますよね?
  2. チャネルは送信者によって閉じられないので、fibonacciここでスコープから外れると、メモリに関して何が起こりますか?私の期待は、一度範囲外になるcgo fibonacci、チャネルとその上のすべてのものがガベージコレクションされることです。私の腸は、これはおそらく何が起こるかではないと私に言います。
0 投票する
3 に答える
728 参照

memory - goroutine のメモリ不足 UPD: go エラー処理

UPD : 結局のところ、Go でのエラー処理に関する質問です。

「メイン スレッド」で Web ページのアドレスを生成し、1 つの go-routine で実際のページを取得し、コンテンツを 経由で返しchan、別の go- でファイルに書き込む単純な Web クローラーを作成しました。ルーティーン。ただし、このプロセスを約 300,000 回繰り返した後、次のエラーが発生します。

エラー「stacktrace」は非常に長く、残念ながら今はありません(実験を繰り返した後、後で投稿します)。

どういうわけかメモリを管理したり、チャネルを閉じたりする必要はありますか?

以下、一部省略したコードです。

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

go - この Go コードがブロックされているのはなぜですか?

次のプログラムを書きました。

チャネルのイベントリストはバッファリングされたチャネルなので、出力「Hey!」のちょうど 100 倍になるはずですが、表示されるのは 1 回だけです。私の間違いはどこですか?

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

select - golang: fmt.Print() を追加しない限り、選択した goroute が停止しません

Go Tourエクササイズ #71をやってみた

のようgo run 71_hang.go okに実行すると、正常に動作します。

ただし、 を使用するgo run 71_hang.go nogoodと、永久に実行されます。

唯一の違いは、ステートメントfmt.Print("")内のエクストラです。defaultselect

よくわかりませんが、ある種の無限ループと競合状態が疑われますか? そして、これが私の解決策です。

注: Go がそうしなかったので、デッドロックではありませんthrow: all goroutines are asleep - deadlock!

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

concurrency - この Go コードがデッドロックになるのはなぜですか?

私はGoが初めてなので、どんな指針も素晴らしいでしょう。そのようなことをデバッグするにはどうすればよいですか?

スニペットhttp://play.golang.org/p/SCr8TZXQUEを実行できます

更新:これ <-time.After(time.Duration(id)*time.Millisecond)は遊び場の行がなくても機能します。理由を知りたいですか?(@dystroy で述べたように、これはおそらく遊び場が時間を処理する方法によるものです)

ローカルで試してみると、これが出力です。

すべてのゴルーチンが完了しますが、とにかくデッドロックがスローされます。タイマーが使用されているかどうかは問題ではなく、どちらの方法でもデッドロックが発生することに注意してください。

0 投票する
1 に答える
163 参照

parallel-processing - 並列化 - スリープが一時停止するのはなぜですか?

最初のゴルーチンだけを待つのはなぜですか

func Sleep(d Duration)
http://golang.org/pkg/time
"Sleep は現在のゴルーチンを期間 d 一時停止します。"

残りは直接実行されます。チャネルが原因だと思いますが、c chan string両方の動作がわかりません。

私の例