这里写目录标题
- 进程、线程、协程
- 并发、并行
- 同步、异步
- I/O密集型任务、CPU密集型任务
进程、线程、协程
进程、线程和协程是计算机程序执行的三种不同方式,它们在资源管理、执行模型和调度机制上有显著的区别。以下是对它们的详细解释和比较:
- 进程:操作系统分配资源和调度的基本单位,每个进程都有自己独立的内存空间、文件描述符和其他资源。
- 线程:线程是进程中的一个执行单元,一个进程可以包含多个线程,线程之间共享进程的内存空间和资源。
- 协程是一种比线程更轻量级的执行单元,协程在用户空间内由程序自行调度,而不是由操作系统内核调度。
使用场景:
- 进程:适用于需要高隔离性和独立资源的任务,如多进程架构的服务器、独立运行的程序等。
- 线程:适用于需要并发执行的任务,如多线程下载、并发处理等。
- 协程:适用于高并发 I/O 密集型任务,如网络爬虫、异步 I/O 操作等。
并发、并行
来个比喻:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。
并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。
并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。所以无论从微观还是从宏观来看,二者都是一起执行的。
并行在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在,并发能够在单处理器系统中存在是因为并发是并行的假象,并行要求程序能够同时执行多个操作,而并发只是要求程序假装同时执行多个操作(每个小时间片执行一个操作,多个操作快速切换执行)。
同步、异步
同步和异步是两种不同的编程模型和执行方式,它们在处理任务和资源调度方面有显著的区别。以下是对同步和异步的详细解释和比较:
- 同步操作是指任务按顺序执行,一个任务必须等待前一个任务完成后才能开始执行。
- 异步操作是指任务可以并发执行,一个任务不需要等待其他任务完成就可以开始执行。Python的异步编程主要是通过asyncio库来实现的,它是Python用于编写并发代码的库,使用async和await关键字。
I/O密集型任务、CPU密集型任务
总结:异步编程适合I/O密集型任务,而多线程或多进程适合CPU密集型任务。
对于CPU密集型任务,异步编程并不会带来性能上的优势,因为这类任务的瓶颈在于CPU的计算能力,而不是等待I/O。在处理CPU密集型任务时,通常会使用多线程或多进程来利用多核CPU的并行处理能力。在Python中,由于全局解释器锁(GIL)的存在,多线程并不能有效地利用多核CPU进行并行计算。因此,对于CPU密集型任务,更推荐使用多进程,可以通过multiprocessing模块来实现。
参考:
- https://blog.csdn.net/java_zero2one/article/details/51477791