Node.jsのメインイベントループをブロックせずにCPU負荷の高いタスクを実行できる、キュー、キャンセル、実行時間統計に対応したWorkerスレッドプール。
sourcegraph/conc
wait group、上限付きプール、順序付きストリーム、panicの伝播により、構造化並行処理をより安全かつシンプルにするGoライブラリ。
- スター
- 10,435
- フォーク
- 366
- 未解決の Issue
- 33
- 最終コミット
- 2 か月前
これは何?
concは、よく使われる並行処理パターンをスコープ付きの読みやすいAPIで提供するGoパッケージです。すべてのgoroutineはconc.WaitGroupが管理するため、放置せず、所有者が完了を待つ責任を負います。
起動したgoroutine内でpanicが発生すると、パッケージがそれを捕捉し、子goroutineのスタックトレースを付けてWait()を呼び出したgoroutineで再度panicを発生させます。これにより、通常のgo文で必要となるrecoverしてエラーを転送する定型コードを避けられます。
wait groupに加えて、concは上限付きのworker pool、結果やエラーを収集するpool、contextをキャンセルするpool、順序付きストリームプロセッサ、スライス向けの並行処理用MapおよびForEachヘルパーを提供します。
主な機能
- 01起動したgoroutineを管理し、完了を待つWaitGroup。
- 02子goroutine内のpanicを、子のスタックトレースとともにWait()で再発生させます。
- 03WithMaxGoroutinesで設定できる、goroutine数に上限のあるpool。
- 04結果やエラーを収集するpool。最初のエラー発生時にcontextをキャンセルする設定も可能です。
- 05タスクを並行実行しつつ、コールバックを逐次実行する順序付きストリーム処理。
- 06スライスに対する並行処理用のiter.Mapとiter.ForEach。
ユースケース
- goroutine内のpanicが気付かれないままプロセスをクラッシュさせないよう、サービスでsync.WaitGroupを置き換える。
- goroutineの同時実行数に固定の上限を設けて、一連のタスクを実行する。
- worker loopを自前で書かずに、スライスを並行してmap処理または反復処理する。
- 出力順を保ちながら、順序付きストリームを並行処理する。
クイックスタート
- 1
ライブラリをGoモジュールに追加します
go get github.com/sourcegraph/conc
使う前に知っておきたいこと
- READMEによると、このパッケージは1.0未満のため、1.0になる前に軽微な破壊的変更が行われる可能性があります。
トピック
よくある質問
- conc とは?
- wait group、上限付きプール、順序付きストリーム、panicの伝播により、構造化並行処理をより安全かつシンプルにするGoライブラリ。 concは、よく使われる並行処理パターンをスコープ付きの読みやすいAPIで提供するGoパッケージです。すべてのgoroutineはconc.WaitGroupが管理するため、放置せず、所有者が完了を待つ責任を負います。
- conc は無料で使えますか?ライセンスは?
- conc は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
- conc は今もメンテナンスされていますか?
- 半年以内に更新あり。conc の最終コミットは 2026年9月1日 です。
- conc は何に使えますか?
- goroutine内のpanicが気付かれないままプロセスをクラッシュさせないよう、サービスでsync.WaitGroupを置き換える。 goroutineの同時実行数に固定の上限を設けて、一連のタスクを実行する。 worker loopを自前で書かずに、スライスを並行してmap処理または反復処理する。 出力順を保ちながら、順序付きストリームを並行処理する。
- conc のインストール方法は?
- ライブラリをGoモジュールに追加します: go get github.com/sourcegraph/conc
- conc はどこで入手できますか?
- ソースコードとインストール手順は GitHub にあります:https://github.com/sourcegraph/conc
概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。
関連プロジェクト
Redisを基盤とする分散タスクキュー向けのGoライブラリ。スケジューリング、リトライ、優先度キュー、Web UIに対応。
Go向けの高速な並行メモリ制限型キャッシュライブラリ。コストベースの追い出しとTinyLFUによる登録判定に対応。
大量のエントリをヒープ上に保持しながらGC負荷を抑える、Go向けの高速な並行処理対応・自動削除型インメモリキャッシュ。
lodashに着想を得た、文字列、スライス、日時、ネットワーク、暗号などを扱う700種類以上の再利用可能な関数を備えたGoユーティリティライブラリ。
信頼性の高いネットワークアプリケーションの構築に役立つ、タスクスケジューリング、ノンブロッキングI/O、ネットワーク、タイマーを提供するRust向け非同期ランタイムです。