关于进程和线程

目录

前言:

1进程:

1.1定义:

1.1.1进程是操作系统分配资源的基本单元,拥有自己的独立空间和资源。

1.1.2每个进程都有一个唯一的PID(进程标识符)来标识。

1.2进程间通信:

1.2.1进程不是孤立的,它们之间需要进行信息交互。

1.2.2可以使用multiprocessing模块的Queue实现进程间的数据传递。Queue是一个由操作系统开辟的消息队列空间。

1.3Queue的方法:

1.3.1put(item, block, timeout):将item写入消息队列。

1.3.2get(block, timeout):

 

1.4进程池Pool:

1.4.1用于管理多个进程的执行。

1.4.2方法包括apply_async(非阻塞方式调用函数)、close(关闭进程池)、join(等待进程池中的进程执行完毕)和terminate(立即终止所有任务)。

2线程:

2.1定义:

2.1.1线程是进程的实体,比进程更小的能独立运行的基本单位。

2.1.2线程基本不拥有系统资源,但共享其所属进程的资源。

2.2线程创建:

2.2.1使用threading.Thread类创建线程,可以指定线程组、要执行的方法、线程名等参数,这是比较常见的线程:

2.3线程的方法:

2.3.1isAlive():

2.3.2getName() / setName(name):

2.3.3isDaemon() / setDaemon(bool):

2.3.4start():启动线程。

2.3.5join():

2.4关于主线程和子线程:

2.4.1主线程:

2.4.2子线程:

2.5守护线程与非守护线程:

2.5.1非守护线程:

2.5.2守护线程:

3关于线程和进程的比较

3.1.资源占用:

3.2通信方式:

3.3并发性:

3.4稳定性:

3.5使用场景:

结语:


前言:

在前面我们已经学过了关于并发编程和和并行的关系,今天我要分享的就是关于进程和线程的内容,进程和线程是操作系统中两个非常重要的概念,它们在程序执行和资源管理方面有着不同的特点和用途.

1进程:

1.1定义

1.1.1进程是操作系统分配资源的基本单元,拥有自己的独立空间和资源。

1.1.2每个进程都有一个唯一的PID(进程标识符)来标识。

1.2进程间通信

1.2.1进程不是孤立的,它们之间需要进行信息交互。

1.2.2可以使用multiprocessing模块的Queue实现进程间的数据传递。Queue是一个由操作系统开辟的消息队列空间。

1.3Queue的方法

1.3.1put(item, block, timeout):将item写入消息队列。

  • 如果block为True且没有设置timeout,队列满时程序会被阻塞。
  • 如果设置了timeout,队列满时会等待timeout秒,之后若仍无空间则抛出Queue.full异常。
  • 如果block为False且队列满,立即抛出Queue.full异常

1.3.2get(block, timeout)

从消息队列中获取一条信息。

1.3.1如果block为True且没有设置timeout,队列空时程序会被阻塞。

1.3.2如果设置了timeout,队列空时会等待timeout秒,之后若仍无消息则抛出queue.empty异常。

1.3.3如果block为False且队列空,立即抛出queue.empty异常。

  • qsize():返回队列中的消息数量。
  • empty():如果队列为空,返回True。
  • full():如果队列满了,返回True。

 

1.4进程池Pool

1.4.1用于管理多个进程的执行。

1.4.2方法包括apply_async(非阻塞方式调用函数)、close(关闭进程池)、join(等待进程池中的进程执行完毕)和terminate(立即终止所有任务)。

2线程:

2.1定义

2.1.1线程是进程的实体,比进程更小的能独立运行的基本单位。

2.1.2线程基本不拥有系统资源,但共享其所属进程的资源。

2.2线程创建

2.2.1使用threading.Thread类创建线程,可以指定线程组、要执行的方法、线程名等参数,这是比较常见的线程:

threading.Tread(group, target, name, args, kwargs)

group:线程组

target:要执行的方法

name:线程名,默认thread-N

args/kwargs:传入给函数的参数

2.3线程的方法

2.3.1isAlive()

返回线程是否还在运行。

2.3.2getName() / setName(name)

获取/设置线程名。

2.3.3isDaemon() / setDaemon(bool)

判断/设置是否为守护线程(后台线程)。默认为False,即前台线程。当主线程执行完毕后,守护线程会随之停止,而前台线程会继续执行直到完成。

2.3.4start():启动线程。

2.3.5join()

等待调用该方法的线程执行完毕。

2.4关于主线程和子线程

2.4.1主线程:

程序启动时运行的线程称为主线程。

2.4.2子线程:

新创建的线程称为子线程或前台线程。

子线程的状态依赖于它所在的进程。如果进程没有退出,子线程能够正常运行;如果进程退出,所有线程(包括子线程)都会退出。但是,这通常取决于线程是否是守护线程以及操作系统的具体行为。在某些情况下,即使主线程结束,子线程也可能继续执行直到它们自己完成或被显式终止。然而,在Python中,如果主线程结束并且没有其他非守护线程在运行,整个进程通常会终止,不管其他守护线程是否已经完成。这是因为Python解释器在所有非守护线程完成后退出,这通常意味着主线程完成后退出。但请注意,这个行为可能依赖于具体的Python实现和平台。因此,在设计多线程程序时应该明确考虑线程的生命周期和同步机制以避免未定义的行为或资源泄漏等问题。

2.5守护线程与非守护线程:

在Python中,线程可以是守护线程或非守护线程。这是通过线程对象的setDaemon(bool)方法来设置的。如果设置为True,则该线程是守护线程;如果设置为False,则是非守护线程。默认情况下,新创建的线程是非守护线程。

2.5.1非守护线程

当程序中存在非守护线程时,主线程结束时并不会立即导致整个Python程序退出。相反,Python会等待所有非守护线程完成执行后才结束整个程序。

2.5.2守护线程

守护线程是一种在后台运行的线程。当程序中只剩下守护线程时,Python程序会退出,不会等待守护线程完成。换句话说,守护线程在主线程结束时会被强制终止,即使它们还没有完成执行

3关于线程和进程的比较

3.1.资源占用:

进程占用独立的内存空间和系统资源,而线程共享所在进程的内存空间和资源。因此,进程的创建、销毁和切换的开销较大,而线程的开销较小。

3.2通信方式:

进程之间需要通过IPC机制进行通信,相对复杂;而线程之间可以通过共享内存等方式进行通信,相对简单。

3.3并发性:

进程和线程都具有并发性,可以在同一时间段内并发执行。但是,由于线程共享进程的内存空间和资源,因此线程之间的调度和同步更加复杂。

3.4稳定性:

由于进程具有独立性,因此一个进程的崩溃不会影响其他进程;而线程之间缺乏独立性,一个线程的崩溃可能导致整个进程的崩溃。因此,在稳定性方面,进程相对更优。

3.5使用场景:

对于需要独立运行、资源占用较大或需要频繁创建和销毁的任务,适合使用进程;而对于需要共享资源、轻量级或需要高并发执行的任务,适合使用线程。在实际应用中,可以根据具体需求选择使用进程或线程。

结语:

好了,关于进程和线程我们今天就先分享到这里了,其实关于进程和线程的选择还是需要具体情况具体分析,这两者都给有优劣,希望大家在操作时可以明确自己想实现的效果,同时,也欢迎大家给我的文章斧正,有什么建议都可以提,同时也希望这篇文章能够帮助你对线程和进程有一个更加清楚的认识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搜索引擎都没流量啦,官网建设还有啥意义?

百度等搜索引擎都没啥流量了,再建设官网还有啥用?如果你把官网定位于获客,那真的没啥太大用处,但是官网不仅仅是用来获客的。 一、搜索引擎的流量被稀释了 搜索引擎流量减少的原因有多个, 1. 社交媒体的崛起&#xf…

电机控制系列模块解析(第八篇)—— 高频注入法

一、基本原理 在电机控制领域,高频方波注入法常用于估计转子的位置和转速。其工作原理是每隔一定的时间间隔在电机输出电压上叠加一个电压脉冲。然后,在两相静止坐标系下或者同步旋转坐标系下对采样时刻的电压和电流进行相应的计算,以实现对…

JS-04-javaScript数据类型和变量

一、数据类型 计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在JavaScript中定义了以下几种数据类型: 1-1、Number JavaScript不区分整数和浮点数&…

关于Vivado的实施过程、SDC和XDC约束支持、Vivado实施子流程、Tcl API支持脚本

关于Vivado的实施过程 AMD Vivado™设计套件可实现以下AMD设备体系结构:AMD Versal™自适应计算加速平台(自适应SoC),AMDUltraScale™、AMD UltraScale™和AMD 7系列FPGA。各种设计来源如下支持,包括: •…

【视频图像取证篇】模糊图片复原车牌号技术原理和实战应用小结

【视频图像取证篇】模糊图片复原车牌号技术原理和实战应用小结 模糊图片复原车牌号常用的技术原理和实战应用—【蘇小沐】 (一)运动模糊视频图像 由于各种各样的原因,主体或者拍摄设备运动共同造成的视频图像模糊等。 1、快门速度 快门速…

Vue事件处理:.passive修饰符与应用场景

.passive修饰符 passive这个修饰符会执行默认方法。你们可能会问,明明默认执行为什么会设置这样一个修饰符。这就要说一下这个修饰符的本意了。 浏览器只有等内核线程执行到事件监听器对应的JavaScript代码时,才能知道内部是否会调用preventDefa…

接口自动化测试用例的编写方法

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 phpunit 接口自动化测试系列 Post接口自动化测试用例 Post方式…

2007-2022年上市公司迪博内部控制评价缺陷数量数据

2007-2022年上市公司迪博内部控制评价缺陷数量数据 1、时间:2007-2022年 2、范围:上市公司 3、指标:证券代码、证券简称、辖区、证监会行业、申万行业、是否存在财报内控重大缺陷、财报内控重大缺陷数量、是否存在财报内控重要缺陷、财报内…

植物病害识别:YOLO甘蔗叶片病害识别分类数据集

YOLO甘蔗叶片病害识别数据集, 包含尾孢菌叶斑病,眼斑病,健康,红腐病,锈病,黄叶病6个常见病类别,3300多张图像,yolo标注完整,全部原始图像,未应用增强。 适用于CV项目&…

【Web - 框架 - Vue】随笔 - Vue的简单使用(01) - 快速上手

【Web - 框架 - Vue】随笔 - Vue的简单使用(01) - 快速上手 Vue模板代码 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模板</title> </head> <body> <div></di…

内容检索(2024.03.08)

随着创作数量的增加&#xff0c;博客文章所涉及的内容越来越庞杂&#xff0c;为了更为方便地阅读&#xff0c;后续更新发布的文章将陆续在此汇总并附上原文链接&#xff0c;感兴趣的小伙伴们可持续关注文章发布动态&#xff01; 本期更新内容&#xff1a; 1. 电源完整性理论与…

CMake笔记

CMake笔记 文章目录 CMake笔记1 工程项目一般形式2 常见命令2.1 project2.2 set2.3 message2.4 add_executable()2.5 语法原则2.6 add_subdirectory2.7 add_library2.8 list 3 安装3.1 安装.h文件/文本文件3.2 安装工程脚本3.3 安装目录/目录下内容3.4 安装库文件3.5安装过程 4…

cocos creator 3.7.2使用shader实现图片扫光特效

简介 功能&#xff1a;图片实现扫光效果 引擎&#xff1a;cocos Creator 3.7.2 开发语言&#xff1a;ts 完整版链接 链接https://lengmo714.top/284d90f4.html 效果图 shader代码 // Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. CCEffect %{techniques:- pas…

CorelDRAW Graphics Suite2024免费试用体验15天版下载

使用基于全球知名的 Corel Painter 画笔技术构建的 100 款逼真像素画笔&#xff0c;以全新的方式将您独特的想法变为现实&#xff01;试用 CorelDRAW 的全新美术画笔&#xff0c;探索您的创意想法。 使用 CorelDRAW 中现在可用的远程字体&#xff0c;畅享更多创作自由&#xf…

【linux驱动开发】IO模型之同步IO、异步IO、IO多路复用

文章目录 IO的概述IO模型的实现阻塞IO非阻塞IOIO多路复用信号驱动异步IO 编译与测试说明 IO的概述 io&#xff0c;英文名称为inoput与output&#xff0c;表示输入与输出。 在冯诺依曼结构计算机中&#xff0c;计算机由 运算器、控制器、存储器、输入、输出五部分组成&#xf…

warning: #188-D: enumerated type mixed with another type

警告解释&#xff1a;枚举类型混合了其它的数据类型&#xff1b; 解决方法&#xff1a; 1&#xff1a;检查代码&#xff0c;是不是存在混用&#xff1b;&#xff1b; 2&#xff1a;结构体初始化为 0 报warning&#xff0c;不能将结构体的第一个变量&#xff0c;使用枚举类型&am…

安全防御第七次实验

需求&#xff1a;在FW7和FW8之间建立一条IPSEC通道保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 一、NAT配置 FW4&#xff1a; FW6&#xff1a; 二、在FW4上做服务器映射 三、配置IPSEC FW5&#xff1a; FW6&#xff1a; 四、防火墙上的安全策略 FW4&#xff1a; FW5:…

VBA中类的解读及应用第十讲:限制文本框的输入,使其只能输入数值(上)

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。 类&#xff0c;是非常抽象的&#xff0c;更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

【动态规划.3】[IOI1994]数字三角形 Number Triangles

题目 https://www.luogu.com.cn/problem/P1216 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 7→3→8→7→5 的路径产生了最大权值。 分析 这是一个动态规划…

抽象版忘记密码模板0.1版本

背景&#xff1a;用户密码忘了&#xff0c;无法登录&#xff0c;怎么办&#xff01;急&#xff01;急&#xff01;急&#xff01; 前置工作——Srpingboot3-maven项目&#xff0c;核心框架如下 <dependency><groupId>org.springframework.boot</groupId><…