一.线程
1.进程:资源的分配单位
线程:cpu执行单位(实体)
2.线程的创建和销毁开销特别小
3.线程之间资源共享,共享的是同一个进程中的资源
4.线程之间不是隔离的
5.线程可不需要 main
二.线程的创建方式
From threading import Thread
第一种
第二种
三.守护线程
1.守护线程:等待所有非守护线程的结束才结束
2.守护进程:主程序代码运行结束,守护进程就随之结束
注:
1.主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),
然后主进程会一直等非守护的子进程都运行完毕后
回收子进程的资源(否则会产生僵尸进程),才会结束,
2.
主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时就被回收)。
因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,
而进程必须保证非守护线程都运行完毕后才能结束,
因为进程执行结束是要回收资源的,
所有必须确保你里面的非守护子线程全部执行完毕。
四、计算密集型和io密集型
io密集型时 线程效率高
计算密集型 进程效率高
五。锁
1.牺牲效率,保证数据安全
2.死锁现象
出现在锁嵌套的时候,双方互相抢对方已经拿到的锁,
导致双方互相等待,
3.递归锁(解决死锁现象)
Rlock 首先本身就是个互斥锁,维护了一个计数器,
每次acquire就+1,release就-1,当计数器为0的时候,大家才能抢这个锁
4. gil锁 :cpython解释器上的一把互斥锁
六.信号量,事件(同进程一样)