1. 程式人生 > 其它 >多執行緒下的執行緒數思考

多執行緒下的執行緒數思考

多執行緒對一些任務的處理如io任務 網路請求任務有明顯的加速
記錄下改變執行緒數 對任務完成時間的影響
純sleep 短視訊批量剪輯
最終效果好的執行緒數目12 4
實驗環境
python
多執行緒模組 進度顯示模組

from progress.bar import IncrementalBar
from concurrent.futures import ThreadPoolExecutor, as_completed

測試函式 隨機數等待 平均等待0.5s

import random,time
def f(i):
    time.sleep(random.random())
    return i

6核筆記本cpu插電 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz

執行緒數:完成時間 bug實際執行緒數要額外加1
{0: 4.453978061676025, 1: 2.8310091495513916, 2: 2.3860023021698, 3: 1.613670825958252, 4: 1.4489991664886475, 5: 1.633991003036499, 6: 1.211998462677002, 7: 1.007110834121704, 8: 0.8080122470855713, 9: 1.0049970149993896, 10: 0.6600701808929443, 11: 1.0269966125488281}

bug修復 函式平均等待1s
{6: 2.7679660320281982, 7: 2.364999771118164, 8: 1.7919583320617676, 9: 1.6459925174713135, 10: 1.8652105331420898, 11: 1.8589973449707031, 12: 1.8350036144256592}

結論 執行緒約2倍下對此類任務加速效果最好


實際場景測試
python 呼叫命令列ffmpeg os.system剪輯視訊去除片尾3s 同時 提前使用模組獲取視訊長度
58個視訊 視訊平均長度:13.455172413793104 平均大小:2.811196672505346
import ffmpeg
{1: 11.968335390090942, 2: 7.046592473983765, 3: 5.27799391746521, 4: 4.8334197998046875, 5: 4.4410669803619385, 6: 4.682313442230225, 7: 4.508931636810303, 8: 4.626992225646973, 9: 4.665976047515869, 10: 4.5992937088012695, 11: 4.543792486190796, 12: 4.627867698669434, 13: 4.518102407455444, 14: 4.62638521194458, ...}

加速後時間消耗為33%
結論 4核心基本達到最大加速了之後加速無明顯收益同時因為開始扎堆新增任務 導致進度顯示不平滑而是最後幾秒扎堆顯示完成