zoukankan      html  css  js  c++  java
  • 线程 理论 多线程对比多进程 线程的使用方式及安全问题

    1.线程理论

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

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

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

    2.创建线程的特点:

       1.创建开销小;

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

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

     守护线程:

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

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

    3.线程的安全问题:

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

      解决办法:互斥锁

    死锁问题:

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

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

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

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

    5.信息量   semaphore

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

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

    6.进程与线程的关系

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

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

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

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

        

      

  • 相关阅读:
    【Python第九篇】异步IO数据库队列缓存
    【Python第八篇】线程、进程及协程
    【Python第七篇】Socket网络编程
    实验五全部代码,ajax请求
    添加员工
    联级选择
    查询,利用jquery选择器
    列表、表格单选框
    注册
    聊天框
  • 原文地址:https://www.cnblogs.com/wyf20190411-/p/10975779.html
Copyright © 2011-2022 走看看