Excel不相邻列如何打印在一起-英雄云拓展知识分享
123
2023-11-07
【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第1章,第4节,由陈刚、王洪军编著。
1.4 并发编程
在讲 Python 的并发编程之前,需要厘清几个概念:进程、线程及它们之间的
区别。
1. 进 程
以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用、内存对各 种资源管理的集合,这就可以称为进程。进程要操作CPU, 必须要先创建一个线程。 一个进程可以并发多个线程,每条线程执行不同的任务。启动一个进程的时候,会自 动启动一个主线程。
2. 线 程
线程是操作系统最小的调度单位,是一串指令的集合,所有在同一个进程里的线 程是共享同一块内存空间的。进程里的第一个线程就是主线程。启动线程比启动进 程快。
3. 进程与线程的区别
进程间的内存是独立的。父进程创建子进程,子进程只是克隆一份父进程。 一 个进程里的线程是共享同一块内存空间的。启动线程比启动进程快。同一个进程的 线程之间可以直接交流,两个进程想通信,必须通过一个中间代理来实现。创建新线 程很简单,而创建新进程则需要对其父进程进行一次克隆, 一个线程可以控制和操作 同一进程里的其他线程,但是进程只能操作子进程。
笔者个人理解两者之间的区别在于:进程是面向操作系统的,而线程是面向 CPU 的。
Python 支持的并发分为多线程并发与多进程并发。从概念上来说,多进程并发 即运行多个独立的程序,优势在于并发处理的任务都由操作系统管理,不足之处在于 程序与各进程之间的通信和数据共享不方便;多线程并发则由程序员管理并发处理 的任务,这种并发方式可以方便地在线程间共享数据。Python 对多线程和多进程的 支持都比一般编程语言更高级,最小化了需要我们完成的工作量。
1.4.1 进程池示例——《低俗小说》
昆汀·塔伦蒂诺导演的那部影片《低俗小说》,在 Imdb Top 250 里,就没跌出过
10名以外。其开创性的格局和叙事手法,巧妙融合了暴力美学、人性与社会意识,对 惯常思维进行重新解构,使其获得了前所未有的赞誉。如果你看过,那么就会知道这 部电影的多线叙事技巧和 Python 并发编程的模型不谋而合。几条不同叙事线平行 进行,偶尔还有剧情同步信号,看过让人大呼过瘾!该片也让布鲁斯·威利的电影事 业进入第二个巅峰状态。有空看看吧,或许回过头来再学 Python 的并发编程,会有 更通透的感觉呢。
Python 标准库为我们提供了 threading 和 multiprocessing 模块以编写相应的 多线程/多进程代码,但是当项目达到一定的规模,频繁创建/销毁进程或者线程是非 常消耗资源的,这个时候就要编写自己的线程池/进程池,以空间换时间。但从 Python 3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 Thread- PoolExecutor 和 ProcessPoolExecutor 两个类,实现了对 threading 和 multiprocess- ing 的进一步抽象,对编写线程池/进程池提供了直接的支持。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~