线程Thread--对自己学习有帮助的资源集锦(不断更新中)

一、前言:

学无止境,在学习线程的理论及使用方法时,有以下文章及代码为我提供了很大帮助,特此附上链接,感谢大佬们!希望对您也有参考借鉴的意义!

二、学习笔记 / 翻译分析

  1. python的多线程使用setDaemon有什么意义?
  2. Python:线程为什么搞个setDaemon

三、个人笔记

1. 希望能通过主线程杀死子线程的方法:setDaemon守护进程。
使用setDaemon()和守护线程这方面知识有关, 比如在启动线程前设置thread.setDaemon(True),就是设置该线程为守护线程,
表示该线程是不重要的,进程退出时不需要等待这个线程执行完成。
这样做的意义在于:避免子线程无限死循环,导致退不出程序,也就是避免孤儿进程。

thread.setDaemon()设置为True, 则设为true的话 则主线程执行完毕后会将子线程回收掉,
设置为false,主进程执行结束时不会回收子线程。
setDaemon()说明:
setDaemon() : 设置此线程是否被主线程守护回收。默认False不回收,需要在 start 方法前调用;
设为True相当于像主线程中注册守护,主线程结束时会将其一并回收。

代码示例:

## --- 服务端部分代码 ---
# 创建新线程
thread1 = myThread('ini_model')
# 开启新线程,初始化模型
thread1.setDaemon(True)
thread1.start()
# 与客户端通信(正常情况为无限循环型,当break时退出)
connect_client()
# 关闭服务端(自动回收子线程threa1)
exit(0)
2. python线程的GIL问题 (全局解释器锁)

什么是GIL :由于python解释器设计中加入了解释器锁,导致python解释器同一时刻只能解释执行一个线程,大大降低了线程的执行效率。

导致后果: 因为遇到阻塞时线程会主动让出解释器,去解释其他线程。所以python多线程在执行多阻塞高延迟IO时可以提升程序效率,其他情况并不能对效率有所提升。

GIL问题建议

  • 尽量使用进程完成无阻塞的并发行为
  • 不使用c作为解释器 (Java C#)

结论 : 在无阻塞状态下,多线程程序和单线程程序执行效率几乎差不多,甚至还不如单线程效率。但是多进程运行相同内容却可以有明显的效率提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值