Python 多线程 学习记录1

     思考问题为什么需要多线程,Python又怎么使用多线程呢?

       1:有哪些程序提速的方法,涉及到的技术。

         单线程串行程序:不加改造的程序, CPU和IO交替执行

         多线程并发:Threading

         多CPU并行:Multiprocessing

         多机器并行:hadoop/hive/spark   大数据技术会用到(暂时不学)

       2:Python 对并发编程的支持:(总览)

        多线程:threading ,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴的等待IO完成

        多进程:multiprocessing ,利用多核CPU的能力,真正的并行执行任务

        异步IO: asynico,在单线程利用CPU和IO同时执行的原理,实现函数异步执行

        Python并发编程有三种方式:多线程Thread      多进程Process      多协程Coroutine

        关键点:***使用Lock对资源加锁,防止冲突访问

                          使用Queue实现不同进程/线程之间的数据通信 ,实现生产者--消费者模式

                          使用线程池Pool/进程池Pool,简化线程/进程的任务提交,等待结束,获取结果

                          使用subprocess启动外部程序的进程,并进行输入输出交互

         3:CPU密集型计算,IO密集型计算

           CPU-bound: 也叫计算密集型,IO可以在短时间内完成,CPU需要大量的计算和处理,特点是CPU占有率很高

           例如:压缩解压缩,加密解密,正则表达式搜索

           I/O bound:是指系统大部分运行的状况是CPU在等待I/O(硬盘/内存)的读/写操作,CPU占用率较低

           例如:文件处理程序,网络爬虫程序,读写数据库程序

                    首先明确 ,一个进程中可以启动多个线程,一个线程中可以启动多个协程。

                    多进程:multiprocessing   可以利用多核CPU并行运算(进程比较大),占用资源多,可启动数目比线程少,适用于CPU-bound;

                    多线程:相比进程,更轻量级,占用资源少,但是相比进程只能并发执行,不能利用多CPU(GIL),相比协程,启动数目有限制,占用内存资源,有线程切换开销

                    适用于IO bound,同时运行的任务数量要求不多

                    多协程asyncio:内存开销最少,启动协程数量最多,但是支持的库有限制(aiohttp/requests),代码实现复杂。适用于:I/O密集型运算,需要超多任务运行,但是有现

                    成库支持的场景

            4:Python慢的原因:

                            ¥¥动态类型语言,边解释边执行。

                            ¥¥GIL     无法利用多核CPU并发执行   关于GIL  ,这里给出资料Python GIL全局解释器锁详解(深度剖析) (biancheng.net)

                              GIL - 简书 (jianshu.com)

                                 

       

         

         

posted @   ChouchouYa  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示