深入理解:线程,进程,协程和并行,并发-协程
爬虫的并发控制: 多进程、多线程、协程 yield 从硬件: 双核四线程(超线程技术): 有两个CPU核心,每个核心有两个逻辑处理器,相当于有四个CPU核心 四核四线程: 有一个CPU核心,每个核心有一个逻辑处理器,相当于有四个CPU核心 从操作系统: 进程和线程,都是CPU任务的执行单位。 进程:早期的操作系统是面向进程的: 表示一个程序的执行活动(打开、执行、保存、关闭) 线程:现在的操作系统都是面向线程: 表示一个进程处理任务时最小调度单位(执行功能a、执行功能b) 一个程序至少开启一个进程,一个进程至少有一个线程。 每个进程都有独立的内存空间,不同进程之间不共享任何状态。 进程之间的通信需要经过操作系统调度控制,通讯效率低、切换开销大。 同一个进程里的多个线程,是共享内存空间,切换开销小,通讯效率高。 线程的工作机制是"抢占式",出现竞争的状态,竞争意味着数据不安全。 引入了"互斥锁":让多个线程安全有序的访问内存空间的机制。 Python的多线程: 类似于 GIL(全局解释器锁):保证一个时间片里只有一个线程在运行。 好处:直接杜绝了多个线程的竞争问题: 坏处:Python的多线程不是真正的多线程。 Python解释器在处理IO阻塞类型的方法时,会释放GIL 如果没有IO操作,该线程会每隔 sys.getcheckinterval() 次释放GIL,让其他线程尝试执行。