专栏首页python3python之多线程与多进程

python之多线程与多进程

1. 多进程与多线程

(1)背景:为何需要多进程或者多线程: 在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务。多任务会带来的好处例如用户边听歌、边上网、边打印,而这些任务之间丝毫不会互相干扰。使用多进程技术,可大大提高计算机的运算速率。

(2)多进程与多线程的区别:

进程:程序在计算机上的一次执行活动。进程分为:系统进程和用户进程。

当运行一个程序时,实际就是启动了一个进程。程序是死的(静态的),进程是活的(动态的)。

线程:是程序中的一个单一的顺序控制流程。

进程是一个相互独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单元(指运行中程序的调度单位)。

区别:进程是资源分配的最小单位,线程是CPU调度的最小单位。

线程是一个进程的实体,是由表示程序运行状态的寄存器(如程序计数器、栈指针)以及堆栈组成,它是比进程更小的单位。

线程是程序中的一个执行流。一个执行流是由CPU运行程序代码并操作程序的数据所形成的。因此,线程被认为是以CPU为主体的行为。

线程不包含进程地址空间中的代码和数据,线程是计算过程在某一时刻的状态。所以,系统在产生一个线程或各个线程之间切换时,负担要比进程小得多。

线程是一个用户级的实体,线程结构驻留在用户空间中,能够被普通的用户级函数直接访问。

一个线程本身不是程序,它必须运行于一个程序(进程)之中。因此,线程可以定义为一个程序中的单个执行流。

多线程是指一个程序中包含多个执行流,多线程是实现并发的一种有效手段。一个进程在其执行过程中,可以产生多个线程,形成多个执行流。每个执行流即每个线程也有它自身的产生、存在和消亡的过程。

多线程程序设计的含义就是可以将程序任务分成几个并行的子任务。

在Windows系统中,进行CPU分配是以线程为单位的,一个进程可能由多个线程组成,这种情况更加复杂,有如下关系:

总线程数<=CPU数量,并行运行

总线程数>CPU数量,并发运行。         并行运行的效率明显高于并发运行。

 2. 多进程编程

  • 进程的概念

第一,进程是一个实体,每一个进程都有它自己的地址空间,一般情况下,包括文本区域、数据区域和堆栈区域。

文本区域:存储处理器执行的代码;

数据区域:存储变量和进程执行期间使用的动态分配的内存.

堆栈区域:存储着活动过程中调用的指令和本地变量。

第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,称其为进程。

  • 进程的特征

动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生、动态消亡的;

并发性:任何进程都可以同其他进程一起并发执行。

独立性:进程是一个能够独立运行的基本单元,同时也是系统分配资源和调度的独立单元;

异步性:进程间的相互制约,使得进程具有执行的间断性。

结构特征:进程由程序、数据、进程控制块三部分组成。

多个不同进程可以包含相同的程序:一个程序在不同数据集里就构成不同的进程,能得到不同的结果,但是在执行过程中,程序不能发生变化。

  • 进程的状态:

就绪状态:进程已经获得除处理器外所需资源,等待分配处理器资源,只要分配了处理器进程就可执行;

运行状态:进程占用处理器资源、处于此状态的进程数目小于或者等于处理器的数目;阻塞状态:由于进程等待某种条件,在条件满足之前无法继续执行。

  1. Miltiprocessing(多进程):

Multiprocessing是Python提供的非常好用的多进程包,用户只需要简单的定义一个函数,

Python就会自动地完成其他的所有事情。它支持子进程、进程间通信、数据共享、不同形式的同步,提供了包括Process、Queue、Pipe、Lock在内的各种组件。合理运用这些组件,可以轻松地完成单进程到并发执行的转换。

创建进程Process模块:

class multiprocessing.Process(group=None,target=None,name=None,args=(),kwargs={})

其中,group为None,它的存在是为了兼容threading.Thread,target表示调用对象,name为别名,args表示调用对象的位置参数元组,kwargs表示调用对象的字典。

例如:创建函数并将其作为多个进程

import multiprocessing

import time

def worker_1(interval):

    print("worker_1")

    time.sleep(interval)

    print("end worker_1")

def worker_2(interval):

    print("worker_2")

    time.sleep(interval)

    print("end worker_2")

def worker_3(interval):

    print("worker_3")

    time.sleep(interval)

    print("end worker_3")

if __name__=='__main__':

    p1=multiprocessing.Process(target=worker_1,args=(2,))

    p2=multiprocessing.Process(target=worker_2,args=(3,))

    p3=multiprocessing.Process(target=worker_3,args=(4,))

    p1.start()

    p2.start()

    p3.start()

    print("The number of CPU is:"+str(multiprocessing.cpu_count()))

    for p in multiprocessing.active_children():

        print("child p.name:"+p.name+"\tp.id"+str(p.pid))

#运行结果:

The number of CPU is:4

child p.name:Process-2  p.id9804

child p.name:Process-1  p.id9172

child p.name:Process-3  p.id6608

注释#:上述代码中使用multiprocessing.cpu_count()函数查看当前计算机的CPU数量,并通过语句multiprocessing.active_children()和for()循环的结合使用,能够清楚地查看当前活动的进程数。运行结果以worker_1、2、3的顺序输出,说明这三个进程间是并发执行的,所以每次开始时的输出顺序可能有所不同。

  • 守护进程Daemon
  • 进程间通信技术Queue通信和Pipe管道(用到之时再补充,不太懂--Python程序设计实用教程--杨连贺)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 浅谈3A和进程

    3计帐(Accounting):记录用户对各种网络服务的用量,并提供给计费系统。整个系统在网络管理与安全问题中十分有效。

    py3study
  • 初遇python进程

      cpu     中央处理器:计算(数字计算和逻辑计算)和控制(控制所有硬件协调工作)

    py3study
  • python进程开发

        程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程...

    py3study
  • Linux僵尸进程

    版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.ne...

    zy010101
  • 服务器模型小结(未完成)

        server每次accept一个请求,收包,完成业务处理逻辑后回包,完成整个请求的处理后,才能继续接入下一个请求。这种server模式仅适用于业务处理

    王亚昌
  • 1.进程管理

    11、对进程的描述错误的是( d) A.进程是动态的概念 B.进程执行需要处理机 C.进程是有生命期的 D.进程是指令的集合

    见贤思齊
  • [每天五分钟,备战架构师-2]操作系统基本原理

    操作系统是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件。注意,这里说的裸机可以是物理机,也可以是虚拟机。随着技术的发展,...

    大江小浪
  • Linux笔记(10)| 进程概述

    父进程返回正整数,子进程返回0,在执行fork函数之前,操作系统只有一个进程,fork函数之前的,代码只会被执行一次,在执行fork函数之后,操作系统有两个几乎...

    飞哥
  • linux进程管理

    查看进行使用的指令是 ps ,一般来说使用的参数是 ps -aux,ps -ef,正常与grep连用

    小小咸鱼YwY
  • Linux 进程总结

    进程,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它的执行需要系统分配资源创建实体之后,才能进行。...

    杰哥的IT之旅

扫码关注云+社区

领取腾讯云代金券