検索

ホームページ  >  に質問  >  本文

C++ 短时间高并发任务用即时多线程好还是线程池好?

我用C++写了个本地代理服务器,目前使用的是即时创建,即时销毁的方式使用多线程的,每一个HTTP请求创建一个线程,交换数据的时候创建一个线程(即一个线程向客户端取数据向服务端发,一个线程向服务端取数据向客户端发),这些线程处理任务的时间都非常短,处理完后即CloseHandle销毁了。
但有时候并发请求数多了以后,感觉还是有点延迟。这种情况下,是不是采用线程池比较好?

阿神阿神2772日前455

全員に返信(3)返信します

  • 阿神

    阿神2017-04-17 15:33:18

    http リクエストの処理に時間がかかる場合は、http リクエストごとにスレッドを作成することをお勧めします。
    しかし、現在の状況では、タスクの処理時間が非常に短いため、ほとんどの時間がスレッドの作成と破棄に費やされます。

    スレッド プールを使用してタスク キューを処理できます。
    以下の実装を参照できます。
    C++11 の単純なスレッド プール コードの読み取り http://www.cnblogs.com/oloroso/p/5881863.html

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 15:33:18

    スレッドの作成と破棄のオーバーヘッドは非常に高く、スレッドが多すぎるとメモリ使用量が非常に多くなります。第 4 世代 i7 DDR5 では、1 秒あたり 1,000 レベルの作成と破壊しか完了できないと推定されています。このオーバーヘッドは構成とプラットフォームに依存します。

    同じ構成の std::condition_variable と std::mutex を使用して実装されたスレッド プールは、1 秒あたり数百万回の同期を簡単に完了できます。

    必要な特定の時間をテストするための簡単なプログラムを作成できます。スレッド プールを使用することをお勧めします。

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 15:33:18

    突然のリクエストを防ぐために、スレッド プールを使用して、ビジネス リクエストに応じてスレッド数を事前に割り当てる必要があります。スレッド プールの動作は非同期であるため、スレッド リソースの競合が大幅に軽減されます。

    返事
    0
  • キャンセル返事