广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python 8.4 进程 vs 线程
  • 681
分享到

Python 8.4 进程 vs 线程

线程进程Python 2023-01-31 01:01:13 681人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

进程 vs 线程这一节我们讨论多进程和多线程的优缺点。首先要实现多任务,我们需要设计Master-Worker模式,Master负责分配任务,Worker负责执行任务。因此,多任务环境下,通常是一个Master,多个Wroker。如何用多进

进程 vs 线程

这一节我们讨论多进程和多线程的优缺点。

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

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

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

多进程最大的优点是稳定性高,因为一个子进程崩溃了不影响其他主进程和子进程。当然如果主进程挂掉,就都挂了。著名的Apache最早就采用的多进程模式。

多进程的缺点是创建进程的代价大,在linux下采用fork调用还行,在windows下创建进程开销巨大。另外,操作系统同时运行的进程数是有限的,在内存的CPU的限制下,同时有几千个进程在跑,操作系统调度都是问题。

多线程模式通常比多进程快一点,但是也快不到哪去。多线程最大的缺点是一个线程挂掉都可能直接造成整个进程的崩溃。因为所有线程共享进程的内存。在Windows上,如果一个线程的运行代码出现问题,你经常会看到这样的提示“该程序执行了非法操作,即将关闭。”,其实往往是某个线程出了问题,操作系统强行关闭整个进程。

在windows下,多线程执行效率比多进程高,所以微软的IIS服务器默认采用多线程模式,由于多线程存在稳定性问题,IIS的稳定性就不如Apache。为了解决这个问题,IIS和Apache又有多进程和多线程混合模式,真是越搞越复杂。


线程切换

无论多进程还是多线程,只要数量一多,效率肯定上不去,为什么呢?

我们打个比方,你正在准备中考,需要复习语文、数学、英语物理、化学这五科。每科需耗时1小时。

如果你先花一小时复习完语文,花一小时复习完数学,这样依次复习完全部课程,这种方式称为单任务模型或批处理模型。

假设你准备切换到多任务模型,先做1分钟语文,切换到数学,在做一分钟数学。这一种方式就像单核CPU执行多任务是一样的了。

但是切换有代价,操作系统切换线程,它需要先保存当前执行的现场环境(CPU寄存器状态、寄存页等),然后把新任务执行环境准备好,才能开始执行。如果要有几千个任务同时执行,操作系统可能就只忙着切换任务,根本没多少时间切换任务。这种情况最常见的就是硬盘狂响,点窗口无反应,系统处于假死状态。

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


计算密集型 vs IO密集型

是否采用多任务的第二个考虑因素是任务的类型。我们可以把任务分为计算密集型和io密集型。

计算密集型主要进行计算,如计算圆周率、对视频进行高清解码等。为了达到CPU高效利用率,计算密集型任务同时进行的数量应等于CPU的核心数。

计算密集型任务主要消耗CPU资源,因此,代码运行效率至关重要。python这样的语言运行效率很低,完全不合适计算密集型任务,这种任务最好用C语言编写。

第二种是IO密集型,主要涉及到网络硬盘、磁盘IO读取的任务都是IO密集型。这种任务表现为CPU消耗的少,主要等待IO操作完成(IO的速度远远低于CPU和内存的速度)。对于IO任务,任务越多,CPU利用率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如WEB应用。

IO密集型任务运行期间,99%的时间都花费在IO上,花在CPU上的时间很少,因此用速度极快的C语言替换运行速度极低的Python完全起不到提升运行效率。最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选。C语言最差。

异步IO

考虑到CPU和IO之间巨大的速度差异,一个任务在执行的过程中大部分时间都是在等待IO,单进程单线程都会导致其他任务无法并行执行,因此,我们才需要多进程模型或者多线程模型来支持多任务并发执行。

现代操作系统最大的改进就是支持异步IO。如果充分利用异步IO,就可以用单进程单线程来执行多任务,这种全新的模型成为事件驱动模型,Nginx就是支持异步IO的Web服务器。它在单核CPU上采用单进程模型就可以高效的执行多任务,在多核CPU上,可以运行多个进程(与CPU核数相同),充分利用多核CPU。

由于系统的进程数量十分有限,因此,操作系统调度非常有效,用异步IO编程模型来执行多任务是一个趋势。

对应到Python语言,单进程的异步编程成为协程,有了协程的支持,就可以基于事件驱动编写高效的多任务程序。我们会在后边讨论如何编写协程。


--结束END--

本文标题: Python 8.4 进程 vs 线程

本文链接: https://www.lsjlt.com/news/183470.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python 8.4 进程 vs 线程
    进程 vs 线程这一节我们讨论多进程和多线程的优缺点。首先要实现多任务,我们需要设计Master-Worker模式,Master负责分配任务,Worker负责执行任务。因此,多任务环境下,通常是一个Master,多个Wroker。如何用多进...
    99+
    2023-01-31
    线程 进程 Python
  • Python进程、线程
    1.线程启动 def run(n): print('%s in thread...'%n) t=threading.Thread(target=run,args=(n,)) t.start #线程等待 t.join 2.多线程同时...
    99+
    2023-01-31
    线程 进程 Python
  • Python进程/线程/协程
    第1章 操作系统历史1.1为什么要有操作系统?程序员无法把所有的硬件操作细节全部了解到,管理这些硬件并且加以优化使用时非常繁琐的工作,这个繁琐的工作就是由操作系统来干的,有了它,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件...
    99+
    2023-01-31
    线程 进程 Python
  • python之线程、进程
      进程:资源的集合  线程:操作CPU的最小调试单位    最简单的多线程实例如下:#!/usr/bin/python #Author:sean #线程有2种调用方式,如下: #直接调用 import threading import ...
    99+
    2023-01-31
    线程 进程 python
  • 如何使用VS Code进行Python编程
    本篇文章给大家分享的是有关如何使用VS Code进行Python编程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Visual Studio Code,简称 VS Code,是...
    99+
    2023-06-17
  • python——多进程、线程、携程
    http://mp.weixin.qq.com/splg_nld=1&plg_usr=1&scene=23&mid=2652078313&plg_vkey=1&__biz=MzI2NjA3NTc4Ng...
    99+
    2023-01-31
    线程 携程 进程
  • Python 多线程及进程
    threading使用 (工业风案例) import threading from time import sleep, ctime loop = [4, 2] class ThreadFunc: def __init_...
    99+
    2023-01-30
    多线程 进程 Python
  • Python:线程、进程与协程(7)——
         前面转载了一篇分析进程池源码的博文,是一篇分析进程池很全面的文章,点击此处可以阅读。在Python中还有一个线程池的概念,它也有并发处理能力,在一定程度上能提高系统运行效率;不正之处欢迎批评指正。     线程的生命周期可以分为5...
    99+
    2023-01-31
    线程 进程 Python
  • Python:线程、进程与协程(6)——
        上篇博文介绍了multiprocessing模块的内存共享(点击此处可以参看),下面讲进程池。有些情况下,所要完成的工作可以上篇博文介绍了multiprocessing模块的内存共享,下面讲进程池。有些情况下,所要完成的工作可以分解...
    99+
    2023-01-31
    线程 进程 Python
  • python教程之进程和线程
    目录进程和线程的区别和联系多进程线程池多线程总结进程和线程的区别和联系 终于开始加深难度,来到进程和线程的知识点~ 单就这两个概念,就难倒过不少初学者——今天...
    99+
    2022-11-12
  • Python:线程、进程与协程(2)—
        上一篇博文介绍了Python中线程、进程与协程的基本概念,通过这几天的学习总结,下面来讲讲Python的threading模块。首先来看看threading模块有哪些方法和类吧。主要有:Thread :线程类,这是用的最多的一个类,...
    99+
    2023-01-31
    线程 进程 Python
  • Python进程/线程/协程相关
    1、获取进程ID。(getpid)os.getpid()2、获取父进程ID。(getppid)os.getppid()3、获取线程ID。(get_ident)(1)、进程内局部标识。import threading threading.ge...
    99+
    2023-01-31
    线程 进程 Python
  • Python:线程、进程与协程(1)——
            最近的业余时间主要放在了学习Python线程、进程和协程里,第一次用python的多线程和多进程是在两个月前,当时只是简单的看了几篇博文然后就跟着用,没有仔细去研究,第一次用的感觉它们其实挺简单的,最近这段时间通过看书, 看...
    99+
    2023-01-31
    线程 进程 Python
  • Python:线程、进程与协程(3)——
        Queue模块是提供队列操作的模块,队列是线程间最常用的交换数据的形式。该模块提供了三种队列:Queue.Queue(maxsize):先进先出,maxsize是队列的大小,其值为非正数时为无线循环队列Queue.LifoQueue...
    99+
    2023-01-31
    线程 进程 Python
  • python线程、进程和协程详解
    引言 解释器环境:python3.5.1 我们都知道python网络编程的两大必学模块socket和socketserver,其中的socketserver是一个支持IO多路复用和多线程、多进程的模块。...
    99+
    2022-06-04
    线程 详解 进程
  • python socket多线程和多进程
    在socket中,如果直接创建的话,是只能接受一个用户的请求需要实现socketserver中的handle方法,可以实现多进程并发访问 SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理...
    99+
    2023-01-31
    多线程 进程 python
  • 使用Python进行线程编程
        对于Python来说,并不缺少并发选项,其标准库包括了对线程、进程和异步I/O的支持。在许多情况下,通过创建诸如异步、线程和子进程之类的高层模块,Python简化了各种并发方法的使用。除了标准库之外,还有一些第三方的解决方案。例如T...
    99+
    2023-01-31
    线程 Python
  • python之多线程与多进程
    1. 多进程与多线程 (1)背景:为何需要多进程或者多线程:在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务。多任务会带来的好处例如用户边听歌、边上网、边打印,而这些任务之间丝毫不会互相干扰。使用多...
    99+
    2023-01-31
    之多 线程 进程
  • python多线程和多进程(二)
    ---恢复内容开始--- 一、多进程   1、multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。 import time from mult...
    99+
    2023-01-30
    多线程 进程 python
  • 简述Python中的进程、线程、协程
    进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由...
    99+
    2022-06-04
    线程 进程 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作