Python 中多进程、多线程、协程
进程: 一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享、开销大。 线程: 调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在一个进程至少有一个线程,叫主线程,而多个线程共享内存(数据共享,共享全局变量),从而极大的提高了程序的运行效率。 协程: 是一种用户态的轻量级线程,协程的调度完全由用户控制,协程拥有自己的寄存器上下文和栈,协程调度切换时。将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器和上下文和栈,直接操作栈基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。 什么时线程竞争? 线程时非独立的,同一个进程里线程是数据共享的,当各个线程方位数据资源时会出现竞争状态即: 数据几乎同步会被多个线程占用,造成数据混乱,即所谓的线程不安全,那怎么解决多线程竞争问题? -- 锁 锁的好处: 确保了某段关键代码(共享数据资源)只能由一个线程从头到尾完整的执行能解决多线竞争下的原子操作问题。 锁的坏处: 阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率大大的降低了,锁的致命问题:死锁。 多进程: 在Linux系统下,使用 os.fork(), 调用一次,返回两次