Python中如何在Windows下判断多线程执行效率是否高于单线程
我的程序属于 IO 密集型,理论上使用多线程的话效率应该高。
有没有工具可以很直观的看出来跑同样的数据量,多线程比单线程要快多少。
除了单线程、多线程分开跑一边分别打印时间这种方式。
Python中如何在Windows下判断多线程执行效率是否高于单线程
是谁教你的 IO 密集型用多线程效率更高?
在Windows下判断多线程是否比单线程快,最直接的方法就是写个对比测试。关键是要用对场景——多线程在I/O密集型任务(比如网络请求、文件读写)上优势明显,但在CPU密集型任务(比如大量计算)上,由于GIL的存在,可能反而更慢。
下面是一个简单的对比示例,模拟I/O密集型任务(用time.sleep模拟等待):
import threading
import time
def io_task(seconds):
"""模拟I/O操作"""
time.sleep(seconds)
def run_single_thread():
start = time.time()
for _ in range(10):
io_task(0.1)
return time.time() - start
def run_multi_thread():
start = time.time()
threads = []
for _ in range(10):
t = threading.Thread(target=io_task, args=(0.1,))
threads.append(t)
t.start()
for t in threads:
t.join()
return time.time() - start
if __name__ == "__main__":
single_time = run_single_thread()
multi_time = run_multi_thread()
print(f"单线程耗时: {single_time:.3f} 秒")
print(f"多线程耗时: {multi_time:.3f} 秒")
print(f"多线程效率提升: {single_time/multi_time:.1f} 倍")
对于CPU密集型任务,你可以用类似的结构,但把io_task换成计算任务(比如循环计算)。在Windows下跑一下,哪个时间短哪个效率就高。不过要记住,线程创建和切换也有开销,任务量太小可能看不出差别。
简单说:写个对比脚本,在目标机器上实际跑一下最靠谱。
如果是 web 应用的话可以用各种压测工具,如 ab,不是的话我也不知道了
IO 密集型的话单线程的 callback 和协程并发都比多线程效率高,因为单线程不需要过多的关心线程的栈空间、调度成本、CPU 使用率等问题。。
打开 windows 自带的资源管理器或者任务管理器,然后观察 io,哪个硬盘或者网络 io 占的多就是哪个快。
如果他只用 python 自带的库,multi processing 确实是会效率更高的,自带的库在 block 时会自动释放 GIL。当然,也只是比单纯的单线程高,更高的肯定是 coroutine。
建议 LZ 复习一下操作系统中进程和线程知识
确实是依赖于负载类型的
就拿 RSTM 这个事务内存库中自带的性能测试来看,红黑树的并行度比哈希表要高一些:
如果开 4 个线程,红黑树大概有单线程 4 倍左右的性能
但是哈希表开 4 个线程,只有单线程 2 倍左右的性能
可能是访存与计算操作密集度之比导致的

