day 33 什么是线程? 两种创建方式. 守护线程. 锁. 死锁现象. 递归锁. GIL锁

时间:2023-03-08 21:53:31

一.线程

      1.进程:资源的分配单位

     线程:cpu执行单位(实体)

  2.线程的创建和销毁开销特别小

  3.线程之间资源共享,共享的是同一个进程中的资源

  4.线程之间不是隔离的

  5.线程可不需要  main

二.线程的创建方式

  From threading import Thread

  第一种

  day 33 什么是线程? 两种创建方式.  守护线程. 锁. 死锁现象. 递归锁. GIL锁

  第二种

  day 33 什么是线程? 两种创建方式.  守护线程. 锁. 死锁现象. 递归锁. GIL锁

三.守护线程

  1.守护线程:等待所有非守护线程的结束才结束

  2.守护进程:主程序代码运行结束,守护进程就随之结束

注:

  1.主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),

    然后主进程会一直等非守护的子进程都运行完毕后

    回收子进程的资源(否则会产生僵尸进程),才会结束,

  2.

主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时就被回收)。因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,而进程必须保证非守护线程都运行完毕后才能结束,因为进程执行结束是要回收资源的,所有必须确保你里面的非守护子线程全部执行完毕。

day 33 什么是线程? 两种创建方式.  守护线程. 锁. 死锁现象. 递归锁. GIL锁

四、计算密集型和io密集型

  io密集型时 线程效率高

  计算密集型  进程效率高

day 33 什么是线程? 两种创建方式.  守护线程. 锁. 死锁现象. 递归锁. GIL锁

五。锁

  1.牺牲效率,保证数据安全

day 33 什么是线程? 两种创建方式.  守护线程. 锁. 死锁现象. 递归锁. GIL锁

  2.死锁现象

    出现在锁嵌套的时候,双方互相抢对方已经拿到的锁,

    导致双方互相等待,

day 33 什么是线程? 两种创建方式.  守护线程. 锁. 死锁现象. 递归锁. GIL锁

  3.递归锁(解决死锁现象)

  Rlock  首先本身就是个互斥锁,维护了一个计数器,

  每次acquire就+1,release就-1,当计数器为0的时候,大家才能抢这个锁

day 33 什么是线程? 两种创建方式.  守护线程. 锁. 死锁现象. 递归锁. GIL锁

  4. gil锁  :cpython解释器上的一把互斥锁

day 33 什么是线程? 两种创建方式.  守护线程. 锁. 死锁现象. 递归锁. GIL锁

六.信号量,事件(同进程一样)