进程:例如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)的任务