zluxingzhe 2019-11-02
进程:计算机程序一次执行的实例,由程序数据段PCB组成,是计算机资源分配和调度的基本单位,也是线程的容器。
线程:线程也叫轻量级进程,是程序执行的最小单位,本身只拥有少部分执行必须的资源。
协程:·协程也叫微线程,用户可自己控制协程切换的时机,不再需要陷入系统的内核态。线程和进程都面临着内核态和用户态的切换问题,耗费许多切换时间。
区别:
1)线程共享内存空间,进程内存独立
2)线程之间可直接通信,进程间通信必须通过中间代理
3)同一进程的线程之间可以相互控制,但进程只能控制子进程
4)线程创建很简单,但创建新进程必须对父进程进行一次克隆
5)改变主线陈会影响其他线程,但改变父进程不会影响子进程
GIL:全局解释器锁,系统中同一时间点,只能有一个线程被解释器解释,无法做到并行,无法充分利用多核资源。
python所谓的多线程就类似于单核CPU情况下的多进程编程。
如何解决GIL锁的问题:
1)更换cpython为jpython
2)使用多进程执行多线程任务
3)通过C来实现多线程
互斥锁:多线程时,保证修改的数据为有序修改,不会产生数据修改混乱。