线程 理论 多线程对比多进程 线程的使用方式及安全问题

1.线程理论

  定义:线程是操作系统最小执行调度单位,被包含在进程中,一个线程就是一堆代码构成的的执行流程

  why需要线程:目的是提高效率,eg:就像一个车间,如果产量更不上那就再造一条流水线,当然也可以再造一个新车间,但是那需要把原材料运过来,很耗时;所以就是创建新的流水线也就是程  

  使用:使用方法和多进程一模一样;不过开启线程的代码可以放在任何位置,开启线程必须放在判断下面

2.创建线程的特点:

   1.创建开销小;

   2.同一个进程中的多个线程  他们数据是共享的;

   3.多个线程之间是平等的无父子关系          所有的pid都是相等的

 守护线程:

  定义:一个线程可以设置另一个线程的守护线程,但是被守护线程结束后守护线程也随之结速

  注:19守护线程会等到所有非守护线程结束后结束,但前提是除了主线程之外还有别的非守护线程,当然如果守护线程已经完成任务  立马结束

3.线程的安全问题:

  共享意味着竞争,多线程可以并发执行,一旦病发了并且访问了同一个资源就会有问题

  解决办法:互斥锁

死锁问题:

  定义:当程序出现不只一把锁,分别被不同的线程持有,有一个资源想要使用必须同时具备两把锁,这样程序就会进入无限卡是状态。

  避免方法:!锁不要多,一个就够,如果发生死锁问题,必须迫使一方先交出锁

4.Rlock  称之为递归锁或可重入锁,不能用来解决死锁问题

  与lock的区别:rlock同一线程可以多次执行acquire,但是执行几次acquire就应该对应release几次,如果一个线程已经执行过acquire 其他线程将无法执行acquire

5.信息量   semaphore

  定义:一种可以限制多少线程同时并发访问的锁

  用途:仅用于控制并访问    并不能防止并发并修改造成的问题

6.进程与线程的关系

  线程不能单独存在,必然存在于进程中,是一种执行单位

  进程:进程是一种资源单位,其包含了运行程序所需的所有资源 

  主线程: 没有线程,进程中的资源无法被利用起来,所以进程至少包含一个线程,视为主进程,当我们启动程序时,操作系统就会自己为这个程序创建一个主线程

  子进程:线程可以由程序后期开启,自己开启线程称之为子线程

    

  

原文地址:https://www.cnblogs.com/wyf20190411-/p/10975779.html