首页 > 系统相关 >进程实现多任务(进程概念、单进程、多进程执行多任务)

进程实现多任务(进程概念、单进程、多进程执行多任务)

时间:2023-07-23 16:12:03浏览次数:37  
标签:work 并行计算 概念 任务 进程 执行 多任务

在Python程序中,想要实现多任务可以使⽤进程来完成,进程是实现多任务的⼀种⽅式。属于CPU密集型的任务。

进程的概念

进程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位

 

⼀个正在运⾏的程序或者软件至少有⼀个进程,也就是说每启动⼀个进程,操作系统都会给其分配⼀定的运⾏资源(比如内存资源)保证进程的运⾏。

 

⽐如:现实⽣活中的公司可以理解成是⼀个进程,公司提供办公资源(电 脑、办公桌椅等),真正⼲活的是员⼯,员⼯可以理解成线程。

 

注意:

  ⼀个程序运⾏后⾄少有⼀个进程,⼀个进程默认至少有⼀个线程(主线程),进程⾥⾯可 以创建多个线程,线程是依附在进程⾥⾯的,没有进程就没有线程。

进程的作用

充分利用cpu资源,让多个任务(小于等于cpu个数)并行运行,从而提高运行效率。

进程适合cpu密集型的任务。

单进程运行

def work_a():
    print("任务A,玩命工作")

def work_b():
    print("任务B,玩命工作")
'''
按照代码的执行顺序 , work_a函数执行完毕后才能执行work_b函数
如果可以让work_a和work_b同时并发运行 , 显然执行效率会大大提升 
'''
work_a()
work_b()

一个任务一个任务的按顺序执行,效率低,执行时间长。适合任务之间有依赖顺序的场景。

多进程执行任务

充分利用cpu(核心)资源,并发执行任务

 1 # 1. 导入多进程模块
 2 import multiprocessing
 3 
 4 
 5 def work_a():
 6     print("任务A,玩命工作")
 7 
 8 
 9 def work_b():
10     print("任务B,玩命工作")
11 
12 
13 if __name__ == '__main__':   # 多进程,一定不用少了此句,此句用于保护主程序代码
14     # 2. 创建子进程
15     work_a_process = multiprocessing.Process(target=work_a())
16     work_b_process = multiprocessing.Process(target=work_b())
17 
18     # 3. 启动进程
19     work_a_process.start()
20     work_b_process.start()

上例:有3个进程:主进程、2个子进程。因为任务只有2个,也可以创建1个子进程。

单进程与多进程对比

  1. 执行方式:

    • 单进程:程序在一个进程中顺序执行,按照代码的先后顺序逐步执行。
    • 多进程:程序在多个进程中同时执行,每个进程拥有独立的内存空间,可以并行执行。
  2. 资源利用:

    • 单进程:只能充分利用单个 CPU 核心,无法实现真正的并行计算。
    • 多进程:可以利用多个 CPU 核心进行并行计算,提高任务的处理速度和系统的响应能力。
  3. 内存占用:

    • 单进程:所有任务共享同一进程的内存空间,可能导致内存占用过高。
    • 多进程:每个进程都拥有独立的内存空间,可以更好地控制内存占用。
  4. 编程复杂度:

    • 单进程:编写单进程程序相对简单,代码结构清晰,调试和排错也相对容易。
    • 多进程:编写多进程程序较复杂,需要考虑进程间通信、数据同步等问题,代码会更加复杂,调试和排错也相对困难。
  5. 适用场景:

    • 单进程:适用于简单的任务,不需要并行计算的场景,或者需要确保程序稳定运行的场景。
    • 多进程:适用于大规模数据处理、复杂计算、并行计算等需要充分利用多核心资源的场景。

总体来说,单进程适合简单的任务,而多进程适合需要并行计算和充分利用多核心资源的任务。选择使用哪种方式取决于具体的需求和应用场景。

 

标签:work,并行计算,概念,任务,进程,执行,多任务
From: https://www.cnblogs.com/allenxx/p/17575141.html

相关文章

  • 多任务编程之并发、并行概念
    多任务的执行方式1.并发2.并行并发:在⼀段时间内一个cpu交替去执⾏任务。示例:对于单核cpu处理多任务,操作系统轮流让各个软件交替执⾏,假如:软件1执⾏0.01秒,切换到软件2,软件2执⾏0.01秒,再切换到软件3,执⾏0.01秒……这样反复执⾏下去。表⾯上看,每个软件都是交替执⾏的,但是,......
  • 腾讯云相关概念梳理
    tencentcloud:底层kvm,opstack等虚拟化技术cvm--虚拟机cbm--裸金属cos-对象存储cbs-云硬盘块存储,ssd云硬盘网站访问慢排查步骤?答:1.程序代码执行方面2.大量数据库操作3.域名DNS解析问题4.服务器环境5.网络的带宽6.用许多javascript特效7.访问的东西大8.系统资源不足9.防火墙......
  • k8s基础之概念讲解
    目录1Kubernetes1.1简介1.2特性1.3架构1.4组件1.4.1MasterNode1.4.2WorkNode1.4.3service1.4.4Namespace1.4.5Volume1.5Pod控制器1.5.1pod1.5.2Pod控制器1Kubernetes1.1简介Kubernetes是一个全新的基于容器技术的分布式架构解决方案,是Google开源的一个容器......
  • Maven权威指南(1):基本概念和依赖
    基本概念标志名称说明groupId组信息表示这个项目所在的组织或者公司信息artifactId唯一Id表示这个项目在组中的唯一Idversion版本信息表示这个项目迭代的版本packaging打包方式定义这个项目的打包方式,默认值为jar,常见值有jar、war、pomclassifier......
  • windows是使用命令kill进程
    参考:https://blog.csdn.net/zaizuxuan/article/details/126950788根据进程名找到进程例如python进程PSC:\Users\27467>tasklist|findstrpythonpython.exe7088Console23,364Kpython.exe1580Cons......
  • tivation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
    困扰我大半年的错误,今天偶然间被解决了,特此分享给被同样问题纠结的朋友们!之前的求助帖,无人应答:http://www.cnblogs.com/freeton/archive/2012/08/28/2660585.htmlhttp://bbs.csdn.net/topics/391988642症状日志中大量报错,IIS严重错误,此类错误默认情况下5分钟连续出现5次会......
  • Postgresql日志归档、复制槽概念
    问题1数据日志什么时候归档?其实这个问题是比较需要明白的,到底日志在正常的情况下,什么时候才能归档,到底条件是什么,要开启postgresql的日志的归档的前提条件,主要需要配置1wal_level=replica(或logical)2archive_mode=on3archive_command='test!-......
  • php与 redis的队列 && 如何守护进程?
    在PHP中,使用队列可以解决以下情况下的一些常见问题:异步任务处理:当应用程序需要处理一些耗时的任务,如发送电子邮件、生成报表、处理文件上传等,可以将这些任务添加到队列中,并使用队列进行异步处理,从而不影响主要的用户请求处理。消息通信:在分布式系统或微服务......
  • 向进程发送信号
    如果我们写了一个程序,监听特定信号,完成某些动作,如何向进程发送这个系统信号呢。kill-SIGUSR11234向进程id是1234的发送SIGUSR1信号kill并不是杀死某个进程,只不过默认会发送一些中断信号,也可以通过它发送一些其他信号。具体有哪些信号,也可以通过kill查询。......
  • Linux 网络基础 2 三次握手 三次挥手 多进程 多线程服务器
    1.包裹函数对服务器客户端等函数进行报错处理以及简化处理比如bindinttcp4bind(shortport,constchar*IP){structsockaddr_inserv_addr;intlfd=Socket(AF_INET,SOCK_STREAM,0);bzero(&serv_addr,sizeof(serv_addr));if(IP==NULL){//......