一、进程
1、什么是进程
- 进程是执行中的程序
- 拥有独立地址空间、内存、数据栈等
- 操作系统管理
- 派生(fork或spawn)新进程
- 进程间通信(IPC)方式共享信息
2、什么是线程
- 同进程下执行,并共享相同的上下文
- 线程间的信息共享和通信更加容易
- 多线程并发执行
- 需要同步原语
3、python与线程
- 解释器主循环
- 主循环中只有一个控制线程在执行
- 使用全局解释器锁(GIL)
4、GIL保证一个线程
- 设置GIL
- 切换进一个线程去运行
- 执行下面操作之一
指定数据的字节码指令
线程主动让出控制权
- 把线程设置回睡眠状态(切换出线程)
- 解锁GIL
- 重复上诉步骤
5、两种线程管理
- _thread:提供了基本的线程和锁
- threading:提供了更高级别、功能更全面的线程管理,支持同步机制,支持守护线程
_thread
函数/方法 | 描述 |
---|---|
thread模块的函数 | |
start_new_thread(function,args,kwargs=None) | 派生一个新的线程,使用给定的args和可选的kwargs来执行function |
allocate_lock() | 分配LockType锁对象 |
exit() | 给线程退出指令 |
LockType锁对象的方法 | |
acquire(wait=None) | 尝试获取锁对象 |
locked() | 如果获取了锁对象则返回True,否则,返回False |
release() | 释放锁 |
threading
对象 | 描述 |
---|---|
Thread | 表示一个执行线程的对象 |
Lock | 锁原语对象(和thread模块中锁一样) |
RLock | 可重入锁对象,使单一线程可以(再次)获得已持有的锁(递归锁) |
Condition | 条件变量对象,使得一个线程等待另一个线程满足特定的‘条件’,比如改变状态或某个数据值 |
Event | 条件变量的通用版本,任意数量的线程等待某个事件的发生,在该事件发生后所有线程将被激活 |
Semaphore | 为线程间共享的有限资源提供了一个‘计数器’,如果没有可用资源时会被阻塞 |
BoundedSemaphore | 与Semaphore相似,不过它不允许超过初始值 |
Timer | 与Thread相似,不过它要在运行等到一段时间 |
Barrier | 创建一个‘障碍’,必须达到指定数量的线程后才可以继续 |