問題タブ [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 に答える
524 参照

go - golang チャネルを使用した一貫性のない結果

大量のテキスト ファイルから一意のリストを取得するタスクを Go で作成しました。チャネルを使用していくつかの並列化を行いましたが、現在、一貫性のない結果が得られています。同じ入力ファイルで毎回出力される/出力されない5つのレコードの差異です。

go run process.go | wc -lFedora x86_64、go1.1.2、8コアAMDでテストしています。

コードは次のとおりです。

空っぽになる前にチャネルを閉じるようです。閉鎖メカニズムがなければ、デッドロックが発生していました-アイデアがありません。

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

clojure - Clojure の core.async を「継続渡しスタイル」と表現できますか?

Clojure のcore.async ライブラリには、ブロックをラップしてブロック IO を処理するチャネルを作成するステート マシンを作成するマクロがあります。go

これは、 C#Go-lang の goroutinesでモデリングし ているようです。async

The Seasoned Schemerでは、継続を渡すためのテクニックについて説明しています。(これは call/cc に基づいているようです)。また、Clojureの区切られた継続に関するDavid Nolenのライブラリも見られます。

ここでは、C#asyncを「現在の継続を伴う呼び出し」と表現しています。

私の質問は、Clojure の core.async を「継続渡しスタイル」と記述できるかということです。

または、「継続」(区切られたものと区切られていないもの) はオーバーロードされた用語ですか?


編集: 追加の注意事項 - David Nolen は、core.async に対して wrt を言っています:

go ブロックの内部では、継続渡しスタイルでコードを手動で記述する必要がないように、これらのことを同期的に実行できるという錯覚を与えます。

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

concurrency - Golang: Producer/Consumer 同時実行モデルですが、シリアル化された結果があります

上記の例では、ジョブが jobChan にプッシュされ、ゴルーチンがそれを jobChan から取り出して同時にジョブを実行し、結果を resultsChan にプッシュします。次に、resultsChan から結果を引き出します。

質問1:

私のコードでは、シリアル化/線形化された結果はありません。ジョブは、ジョブ 1、ジョブ 2、ジョブ 3 の順に進みますが。結果は、最も時間がかかるジョブに応じて、ジョブ 3、ジョブ 1、ジョブ 2 のようになります。

ジョブを同時に実行したいのですが、結果がジョブとして入ったのと同じ順序で resultsChan から出てくることを確認する必要があります。

質問2:

約 30 万のジョブがあります。これは、コードが最大 30 万のゴルーチンを生成することを意味します。非常に多くのゴルーチンを使用することは効率的ですか、それともジョブを 100 程度のスライスにグループ化し、各ゴルーチンを 1 ではなく 100 を通過させる方がよいでしょうか。

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

http - golang httpタイムアウトとゴルーチンの蓄積

私は goroutines を使用して http.Get タイムアウトを達成しました。その後、goroutines の数が着実に増加していることがわかりました。1000 程度に達すると、プログラムは終了します。

コード:

http://play.golang.org/p/SzGTMMmZkI

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

concurrency - データがチャネル経由で送信されていない

ここにこのコードがあります

https://gist.github.com/ChasingLogic/8324442

Golang を使用してネットワーク プログラミングを学ぼうとしていますが、これは同時実行の最初の試みであり、目標は、メッセージが送信され、接続されているすべてのクライアントにエコーされる IRC サーバーを簡素化することと同等です。

何らかの理由で、私のコードはチャネルにデータを送信することはありません。エラーチェックを入れると、EOFが無限に吐き出されます。