33 线程的创建 验证线程之间数据共享 守护线程

今日内容

线程理论

什么是线程

线程的两种创建方式(重点)

查看线程的pid

计算密集型和io密集型

 

线程与进程的效率对比

线程空间不是隔离的

守护线程(**)

锁(重点)

死锁现象(重点)

递归锁(重点)

以后用递归锁

子进程不能input

线程不需要main

GIL锁(重点)

 

今日内容回顾:

线程的两种创建方式:(重点)

From threading import Thread

Def f1(n):

Print(n)

main

T = Thread(target=f1,args=(1,))

T.start()

 

Class MyThread(Thread):

Def __init__(self,n):

Super().__init__()

Self.n = n

Def run(self):

Pass

Main

T = MyThread(5)

T.start()

进程:资源分配单位

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

 

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

 

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

 

资源共享就涉及到数据安全问题,加锁来解决

From threading import Thread,Lock

 

Loc = Lock()

T = thread(target=f1,args=(loc,))

 

Loc.acquire()

代码

Loc.release()

锁:牺牲了效率,保证了数据安全(重点)

 

死锁现象:出现在锁嵌套的时候,双方互相抢对方已经拿到的锁,导致双方互相等待,天长地久永不分离,死锁现象(重点)

 

 

递归锁:解决死锁现象(重点)

Rlock  首先本身就是个互斥锁,维护了一个计数器,每次acquire就+1,release就-1,当计数器为0的时候,大家才能抢这个锁

 

守护线程(**)

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

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

GIL锁(重点) : cpython解释器上的一把互斥锁

 

信号量,事件 了解

 

01 线程的两种创建方式

02 查看线程的进程id

03 验证线程是数据共享的

04 多进程和多线程的效率对比

05 锁 同步 互斥锁

06 死锁现象

07 递归锁

08 多线程的程序不结束多进程的程序不结束的区别

08 守护线程

10 gil解释

11 gil解释

12 子进程不能input

13 事件

原文地址:https://www.cnblogs.com/work14/p/10267136.html