一 . 线程
线程是cpu最小的执行单位,是能独立运行的基本单位,进程是资源分配的最小单位。且:每个进程中最小有一个线程
线程与进程的区别:
1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
线程的特点:(1)轻型实体(2)独立调度和分派的基本单位 (3)共享进程资源(4)可并发执行
线程跟进程一样,都是互相充满 ‘敌意’ 的,彼此抢占资源,彼此占cpu。
二 . 线程的两种创建方式
(1) from threading import Thread
def func( )
pass
t = Thread(target = func,args = ())
t.start()
(2) class MyThread(Thread):
def __init__(self,n):
super().__init()
self.n = n
def run(self):
pass
t = MyThead(12)
三 . 线程与进程效率的对比 ,join方法
线程比进程的效率要快很多,进程的运行还需要电脑的配置,cpu的运行速度,线程的话是不需要的,所以,开启一个线程的时间是远小于进程的。
四 . 同线程之间是数据共享的
同一进程与线程之间是数据共享的,多个线程之间有数据栈,数据不共享的,全局变量在多个线程之间数据是
共享的,进程也一样。
五 . 锁(互斥锁同步锁)
Look,解决数据共享时数据不安全的问题,但是同时牺牲了效率。
开始锁:lock.acquire()
关闭锁:lock.release() 只能有一个锁
六 . 死锁现象
双方互相等待对方释放对方手里拿到的那个锁
一样的,也是只能有一个锁,你在用,别人就不能用,就跟上厕所是一样的,别人在上这个厕所,你只能等。
七 . 递归锁 :Rlock
A = B = Rlock 创建同等条件
同样是互斥的,里面存着个计数器,只有等锁计数为0的时候,才能将锁传递给下一位追梦者。
八 . 守护进程
线程的守护进程跟进程的守护进程不太一样,
守护线程:主线程等着进程中所有非守护线程的结束,才算结束。
守护进程:主进程代码结束,守护进程也跟着结束。
九 . 信号量:大宝剑原理
四个位置十个人,一次只能进去四个人,也就是每个代码的时间不同,进出的时间也不同,是不规律的,又快也有慢。
十 . 事件
e = Event
线程的事件跟进程的事件是一样的
event.isSet():返回event的状态值; event.wait():如果 event.isSet()==False将阻塞线程; event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度; event.clear():恢复event的状态值为False。