第18章多线程编程
多线程:异步,子任务独立,并行处理来提升任务效率
使用非阻塞I/O
使用多线程变成和共享数据结构Queue
用户请求线程
请求处理器
应答线程
18.2线程和进程
进程:程序一次执行过程,有自己地址,内存,数据栈
可通过fork和spawn完成其他任务,使用进程间通讯IPC
18.2.2线程
同一进程的线程共享运行环境,并发执行,容易导致不安全
18.3Python、线程和全局解释器锁
Python虚拟机执行Python代码,任意时刻,只有一个程序在CPU中运行
全局解释器锁GIL:对Python虚拟机的访问,保证同一时刻只有一个线程运行
执行过程:
1 设置GIL
2切换到一个线程运行
3 运行:
a:指定指令 或
b:线程让出控制
4 把线程设置为睡眠状态
5 解锁GIL
6 重复以上所有步骤
18.3.2 退出线程
threading模块能确保重要子线程退出,进程才会结束
18.3.3 在Python中使用线程
使用能够POSIX兼容的线程pthreads
不要使用thread的原因:主线程结束,子线程被强制结束
18.4 thread模块
提供:锁,互斥锁,互斥量
st