python 线程和进程

1. 线程

  • GIL Global interpreter lock(cpython)
  • Python中一个线程对应C语言中的一个线程
  • GIL使得同一个时刻只有一个线程在一个CPU上执行字节码,无法将多个线程映射到多个CPU上执行
  • GIL会根据执行的字节码行数以及时间片释放GIL,GIL在遇到IO操作时主动释放

1.1 线程间的通信

  • 共享变量
  • Queue:Queue是阻塞的,当Queue为空时,Queue.get()会一直等待,当Queue满时,Queue.put()会一直等待,直到有空才会传数值。

1.2 线程间的锁

  •     Lock
  •     RLock
  •     Condition
  •     Semaphore(用于控制进入数量的锁)

1.3 线程池

concurrent.futures.ThreadPoolExecutor

 

2. 进程

耗CPU的操作,用多进程编程,对于IO操作来说,使用多线程编程,进程切换代价要高于线程。

对于耗费CPU的操作,多进程优于多线程

对于IO操作来说,多线程优于多进程

2.1 进程间的通信

  • 使用multiprocessing. Manage().Queue(). from multiprocessing import Process, Manager ,Queue, (和线程中的Queue不一样)
  • 通过pip实现进程间通信,pip只能适用于两个进程

注意:

共享全局变量不能适用于多进程编程,可以适用于多线程

multiprocessing中的queue不能用于pool进程池,pool中的进程间通信需要使用manager中的queue。

 

 

 

 

 

 

你可能感兴趣的:(python)