1.线程理论
定义:线程是操作系统最小执行调度单位,被包含在进程中,一个线程就是一堆代码构成的的执行流程
why需要线程:目的是提高效率,eg:就像一个车间,如果产量更不上那就再造一条流水线,当然也可以再造一个新车间,但是那需要把原材料运过来,很耗时;所以就是创建新的流水线也就是程
使用:使用方法和多进程一模一样;不过开启线程的代码可以放在任何位置,开启线程必须放在判断下面
2.创建线程的特点:
1.创建开销小;
2.同一个进程中的多个线程 他们数据是共享的;
3.多个线程之间是平等的无父子关系 所有的pid都是相等的
守护线程:
定义:一个线程可以设置另一个线程的守护线程,但是被守护线程结束后守护线程也随之结速
注:19守护线程会等到所有非守护线程结束后结束,但前提是除了主线程之外还有别的非守护线程,当然如果守护线程已经完成任务 立马结束
3.线程的安全问题:
共享意味着竞争,多线程可以并发执行,一旦病发了并且访问了同一个资源就会有问题
解决办法:互斥锁
死锁问题:
定义:当程序出现不只一把锁,分别被不同的线程持有,有一个资源想要使用必须同时具备两把锁,这样程序就会进入无限卡是状态。
避免方法:!锁不要多,一个就够,如果发生死锁问题,必须迫使一方先交出锁
4.Rlock 称之为递归锁或可重入锁,不能用来解决死锁问题
与lock的区别:rlock同一线程可以多次执行acquire,但是执行几次acquire就应该对应release几次,如果一个线程已经执行过acquire 其他线程将无法执行acquire
5.信息量 semaphore
定义:一种可以限制多少线程同时并发访问的锁
用途:仅用于控制并访问 并不能防止并发并修改造成的问题
6.进程与线程的关系
线程不能单独存在,必然存在于进程中,是一种执行单位
进程:进程是一种资源单位,其包含了运行程序所需的所有资源
主线程: 没有线程,进程中的资源无法被利用起来,所以进程至少包含一个线程,视为主进程,当我们启动程序时,操作系统就会自己为这个程序创建一个主线程
子进程:线程可以由程序后期开启,自己开启线程称之为子线程