問題タブ [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.
go - golang チャネルを使用した一貫性のない結果
大量のテキスト ファイルから一意のリストを取得するタスクを Go で作成しました。チャネルを使用していくつかの並列化を行いましたが、現在、一貫性のない結果が得られています。同じ入力ファイルで毎回出力される/出力されない5つのレコードの差異です。
go run process.go | wc -l
Fedora x86_64、go1.1.2、8コアAMDでテストしています。
コードは次のとおりです。
空っぽになる前にチャネルを閉じるようです。閉鎖メカニズムがなければ、デッドロックが発生していました-アイデアがありません。
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 ブロックの内部では、継続渡しスタイルでコードを手動で記述する必要がないように、これらのことを同期的に実行できるという錯覚を与えます。
concurrency - Golang: Producer/Consumer 同時実行モデルですが、シリアル化された結果があります
上記の例では、ジョブが jobChan にプッシュされ、ゴルーチンがそれを jobChan から取り出して同時にジョブを実行し、結果を resultsChan にプッシュします。次に、resultsChan から結果を引き出します。
質問1:
私のコードでは、シリアル化/線形化された結果はありません。ジョブは、ジョブ 1、ジョブ 2、ジョブ 3 の順に進みますが。結果は、最も時間がかかるジョブに応じて、ジョブ 3、ジョブ 1、ジョブ 2 のようになります。
ジョブを同時に実行したいのですが、結果がジョブとして入ったのと同じ順序で resultsChan から出てくることを確認する必要があります。
質問2:
約 30 万のジョブがあります。これは、コードが最大 30 万のゴルーチンを生成することを意味します。非常に多くのゴルーチンを使用することは効率的ですか、それともジョブを 100 程度のスライスにグループ化し、各ゴルーチンを 1 ではなく 100 を通過させる方がよいでしょうか。
http - golang httpタイムアウトとゴルーチンの蓄積
私は goroutines を使用して http.Get タイムアウトを達成しました。その後、goroutines の数が着実に増加していることがわかりました。1000 程度に達すると、プログラムは終了します。
コード:
concurrency - データがチャネル経由で送信されていない
ここにこのコードがあります
https://gist.github.com/ChasingLogic/8324442
Golang を使用してネットワーク プログラミングを学ぼうとしていますが、これは同時実行の最初の試みであり、目標は、メッセージが送信され、接続されているすべてのクライアントにエコーされる IRC サーバーを簡素化することと同等です。
何らかの理由で、私のコードはチャネルにデータを送信することはありません。エラーチェックを入れると、EOFが無限に吐き出されます。