python中一般使用threading和concurrent.futures.ThreadPoolExecutor
定义: 线程是操作系统调度的基本单位,是进程中的一个执行路径。一个进程可以包含多个线程,它们共享进程的内存空间。
特点:
共享内存: 线程共享进程的内存空间,可以方便地共享数据。 轻量级: 创建和销毁线程的开销比进程小。 并发执行: 在多核处理器上,多个线程可以并发执行。 适用场景:
I/O 密集型任务: 适合处理需要等待外部设备响应的任务,如网络请求、文件读写。 需要共享数据: 适合需要多个执行路径共享数据的场景。
python中一般用multiprocessing和concurrent.futures.ProcessPoolExecutor
定义: 进程是操作系统分配资源的基本单位,每个进程都有独立的内存空间。进程之间的通信需要通过进程间通信(IPC)机制。
特点:
独立内存空间: 进程之间不共享内存,数据隔离性好。 较重: 创建和销毁进程的开销较大。 真正并行: 在多核处理器上,多个进程可以真正并行执行。 适用场景:
CPU 密集型任务: 适合需要大量计算的任务,因为可以利用多核处理器的能力。 需要隔离: 适合需要数据隔离的场景,避免共享内存带来的复杂性
pythonimport multiprocessing
import math
def compute_factorial(n):
return math.factorial(n)
def main():
numbers = [100000, 200000, 300000, 400000, 500000]
# create processing pool
with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool:
# map parallel computing
results = pool.map(compute_factorial, numbers)
for number, result in zip(numbers, results):
print(f'Factorial of {number} is calculated.')
if __name__ == '__main__':
main()
python中一般用asyncio和aiohttp
定义: 协程是一种用户态的轻量级线程,由程序自身调度。协程允许在执行过程中暂停和恢复,通常用于异步编程。
特点:
轻量级: 协程的创建和销毁开销非常小。 非抢占式调度: 协程由程序显式调度,而不是由操作系统调度。 单线程执行: 协程通常在单线程中执行,避免了线程切换的开销。
适用场景:
异步 I/O: 适合处理大量并发 I/O操作,如网络请求、数据库查询。 高并发: 适合需要处理大量并发任务的场景,尤其是在 I/O 密集型任务
本文作者:lixf6
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!