进程:例如qq,要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等。
对各种资源管理的集合就可以称为进程
线程:是操作系统最小的调度单位,是一串指令的集合
进程要操作CPU,必须要先创建一个线程。
最形象的比喻,进程就是一个房间(一个资源的集合),线程就是房间里的人。一个进程想要执行至少有一个线程(可以干活的人)
所有在同一进程里的线程共享同一块内存空间(房间)。进程里的第一个线程就是主线程,主线程可以创建很多子线程,子线程下面还可以创建子线程(拉人头干活),各自独立互不相干。
问题:启动一个进程快,还是启动一个线程快?
答案:启动一个线程快。
原因:启动进程等于造房间(申请内存资源空间),线程直接拉人所以速度快
问题:进程快还是线程快?
答案:没法比
原因:进程和线程启动后速度是一样的
进程和线程的区别?
线程共享内存空间,而进程的内存是独立的
多个子进程的数据也是独立的(copy自父进程)
同一进程的线程之间可以互相交流(因为在同一屋子里),一个线程可以控制和操作同一进程里的其他线程,但父进程只能操作子进程(总公司开分公司,但不能控制其他公司)。
2个进程之间如果非要想实现通讯,必须通过一个中间代理来实现
互斥锁:线程同时修改同一份数据时必须加锁(俗称mutex互斥锁,我干了你就不能干),防止互相修改,导致结果不准确。
递归锁:锁中有锁
join用途:等待一个线程执行结束
守护线程(仆人):服务于非守护线程(主人),主人死了仆人都要跟着殉葬。
队列(queue)的作用:
1,解耦,所谓解耦,使程序之间松耦合(一个模块修改了不会影响其他的)
2,提高处理效率
FIFO=first in first out 仓库管理
LIFO=last in first out 挤地铁
event事件:参考汽车等红绿灯
python的多线程不适合CPU密集操作系统的任务,适合io操作密集型(如socket server)的任务