web-dev-qa-db-ja.com

既存のスレッドプールC実装

Cでのpthreadスレッドプールのオープンソース実装はどれですか。

この実装が次の場合の追加ポイント:

  • 軽量:glib、APR、NSPRなどは大きな賛同を得ています。ファイルは2つ(ヘッダーと実装)だけです。
  • 複数のプラットフォーム(Linux、BSD、Mac OS Xなど)でテスト済み。
  • まだ維持されています。
36

私は使用できるものを作ることに取り組み、それをgithubに公開しました。それは想像できないほど threadpool と呼ばれています。

24

目標が軽量である場合、最後に必要なのは、事前に記述された、超汎用的な高レベルの抽象化ベースの実装です。特定のタスクに適したスレッドプールを自分で実装することはかなり簡単ですが、実際にスレッドプールが必要かどうか、または必要に応じてスレッドを作成して破棄するだけで問題ないかどうかも疑問に思われるかもしれません。

アプリケーションの詳細を知らなければ、これ以上具体的なアドバイスはできません。しかし、役立つツールは次のとおりです。

  • 条件変数
  • セマフォ
  • ミューテックスによって保護されたジョブキュー
  • POSIXメッセージキュー

これは実装です これらの機能:

  • ANSI CおよびPOSIX準拠
  • 最小限の強力なAPI
  • ユーザーからの同期
  • 完全なドキュメント
5
Pithikos

私はかつて this を使用しましたが、これは実際にはそれ自体が公式の実装ではありません。要求どおりにpthreadを使用し、実行する必要があることについていくつかのアイデアを提供します。 (見る threadpool.hthreadpool.cthreadpool_test.c、およびMakefileでコンパイル方法の説明を参照してください。) それは元々の意図 がおそらくあなたのものと異なるため、明らかにリファクタリングを行う必要があります。実際にはかなりよくコメントされています。

これは元の質問から逸脱していますが、最新のC標準である非公式のC1X(ウィキペディアのハイパーリンク制限を参照)がスレッドN1570のサポートを計画している(Google it、ハイパーリンク制限を再度!)(7.31。 15)。

私の経験からのいくつかの個人的なアドバイスは、アプリケーションcanが実際に並行して実行されることを確認することであり、新しいスレッドを作成するオーバーヘッドが高すぎてスレッドプールなしでは生きられない場合。個人的に私はこれらの両方の点で失敗しました、そして私は実際に私のシングルスレッドのアプリケーションよりも遅い実装に終わりました。また、実際にはアプリケーションのパフォーマンスを低下させる、キャッシュのロックアウトやミスなど、さまざまな問題に注意する必要があります。

私はたぶん今までに迷っていますが、幸運を祈ります。

2
Arka