文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python学习之旅(二十四)

2023-01-30 22:58

关注

一、threadlocal

在多线程环境下,每个线程都有自己的数据

一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁

在函数间一层层调用的时候,使用局部变量很麻烦,使用全局变量无法实现不同对象之间的共享

threadlocal消除了对象在每层函数中的传递问题

ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源

二、进程 VS. 线程

要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker

如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker

如果用多线程实现Master-Worker,主线程就是Master,其他线程就是Worker

(1)多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程

它的缺点是创建进程的代价大,在Windows下创建进程开销巨大

另外,操作系统能同时运行的进程数也是有限的,在内存和CPU的限制下,如果有几千个进程同时运行,操作系统连调度都会成问题

(2)多线程模式通常比多进程快一点,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存

在Windows上,如果一个线程执行的代码出了问题,你经常可以看到这样的提示:“该程序执行了非法操作,即将关闭”,其实往往是某个线程出了问题,但是操作系统会强制结束整个进程

1、线程切换

假设有A、B、C三个任务,A需要站在梯子上完成,B要坐着完成,C要在水里完成,要完成这三个任务都需要1个小时,如果依次执行这三个线程总共要花3个小时,这种方式称为单任务模型,或者批处理任务模型

线程切换:每个任务来回切换,都执行一点,但线程切换是有代价的

多任务一旦多到一个限度,就会消耗掉系统所有的资源,结果效率急剧下降,所有任务都做不好

2、计算密集型 VS. IO密集型

(1)可以把任务分为计算密集型和IO密集型

(2)计算密集型任务的特点是要进行大量的计算,消耗CPU资源

这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低

对于计算密集型任务,最好用C语言编写

(3)IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成

对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。

对于IO密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选

3、异步IO

即多进程模型或者多线程模型来支持多任务并发执行

现代操作系统对IO操作已经做了巨大的改进,最大的特点就是支持异步IO

如果充分利用操作系统提供的异步IO支持,就可以用单进程单线程模型来执行多任务,这种全新的模型称为事件驱动模型

在Python语言中,单线程的异步编程模型称为协程,有了协程的支持,就可以基于事件驱动编写高效的多任务程序

三、分布式进程

在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上

 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯