thread poolは、共有のワークキューからタスクを取り出す、再利用可能なワーカースレッドの固定された集合です。 タスクごとにスレッドを生成するコストを避け、同時実行スレッド数に上限を設けます。
なぜ使うのか
スレッドの生成と破棄は高コストで(スタックの割り当て、OSスケジューリングの準備)、際限のないスレッド生成はメモリを枯渇させ、コンテキストスイッチのスラッシングを引き起こします。プールは生成コストをならし、並行度を制限します。
text
tasks → [ work queue ] → worker 1
worker 2 (N fixed workers pull & run)
worker 3
例
python
concurrent.futures ThreadPoolExecutor
ThreadPoolExecutor(max_workers=) pool:
futures = [pool.submit(handle, req) req requests]
