多线程

多线程

1. 线程是最小的资源调度单位,在程序运行时默认只有一个线程,叫做主线程;同一个进程中的线程之间能够共享资源,适用于io密集型

2. 多线程的执行是无序的,由操作系统决定

3. 多线程并发操作,节省时间

4. 自定制多线程类 一般重写run方法,其中为业务逻辑

5. .start()开启子线程 .run() 只是单纯的运行主线程中的函数

6. 线程对于同一个资源的访问, 如果没有控制得当,就会对于同一资源的数据进行破坏,而且线程的运行结果不可
预料,这种现象叫做‘线程不安全’

  解决线程不安全问题:线程同步概念 (协同步调,按照预定的先后顺序,进行执行---按顺序工作)
  ---> 互斥锁 对于上锁的资源,每次只能有一个线程能够访问,
  第二个线程需等待上一个线程结束访问,才能访问
  1、操作系统调用work1的时候,work1获取到num=0,此刻会将num上锁,不允许其他的线程操作num
  2、work1 对于num加1之后,进行重新的赋值
  3、操作完毕之后,对于Num解锁,num的值已经解锁,其他的线程可以操作num。
  4、work2进行操作的时候,Num的值已经是修改之后的num的值了,是1,work2在对Num进行修改的时候,work2也要对于Num进行上锁
  5、同理,对于数据进行修改的过程中,一定要对Num 进行加锁,操作完成之后,一定要解锁,这个时候,就保证了数据的正确性

7. 线程的状态: 创建 --启动--> 就绪 <--调度--> 运行 --> 死亡
             ↑满足条件                       ↓等待条件
                                        <--等待状态(阻塞)<--
threading

threading.Thread(target=func, args=(,)) 创建新线程

threading.current_thread() 获取当前线程

threading.enumerate() 枚举所有线程,返回线程列表

threading.active_count() 查看活跃的线程个数

posted @ 2020-04-20 16:47  爱学习的红领巾  阅读(144)  评论(0编辑  收藏  举报