进程 线程 协程
Python进程: 在内存中运行程序的实例,具有独立的内存空间和资源,包含程序代码、数据.
功能:可以同时执行多个任务,适用于并行计算和任务隔离
Python线程: 是在同一个进程内部创建的执行单元,共享进程的资源和内存空间
Python协程: 单线程下程序层面控制任务切换实现的并发
-使用协程,遇到io就会切换---》task1(),task2(),当task1执行中遇到io操作,程序层面切换到task2中执行
-针对I/O密集型操作效率才高,如果是纯计算密集型,它就不切。
区别:
1) 创建开销上: 创建进程开销更大,因为进程需要分配独立的内存和资源,而线程共享进程的内存和资源
2) 资源共享上: 进程之间的内存空间是相互独立的,无法直接共享数据,需要使用进程间通信IPC机制.而线程在同一进程内共享内存空间,可以直接共享数据,但需要注意线程安全问题,并使用锁、条件变量等同步机制
-cpython解释器:io密集型使用多线程,计算密集型使用多进程
-io密集型,遇到io操作会切换cpu,假设你开了8个线程,8个线程都有io操作---》io操作不消耗cpu---》一段时间内看上去,其实8个线程都执行了
-计算密集型,消耗cpu,如果开了8个线程,第一个线程会一直占着cpu,而不会调度到其他线程执行,其他7个线程根本没执行,所以我们开8个进程,每个进程有一个线程,8个进程下的线程会被8个cpu执行,从而效率高
-I/O密集型任务,如网络请求、文件读写等
- python有GIL锁的原因,同一个进程下多个线程实际上同一时刻,只有一个线程在执行