进程、线程

【Python】 进程与线程 在计算机操作系统中,进程是资源分配和调度的基本单位。每个进程都有自己独立的内存空间、代码执行上下文以及系统资源,如文件描述符、网络连接等。进程之间相互隔离,一个进程的崩溃通常不会影响到其他进程。 在 Python 中,多进程编程允许我们充分利用多核处理器的优势,并行地执行多个任务,从而提高程序的执行效率和响应速度。例如,在处理大规模数据计算、网络爬虫的并发请求、图像处理等任务时,多进程可以显著缩短执行时间。 阅读详情
先阐述一下 进程和 线程的概念和区别,这是一个许多大学老师也讲不清楚的问题。

概念

进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是 系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合,它本身没有 任何运行的含义,只是一个静态实体。而 进程则不同,它是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。
线程(Thread)是 进程的一个实体,是CPU调度和分派的基本单位。 线程不能够独立执行,必须依存在 应用程序中,由应用程序提供多个线程执行控制。

二者关系

线程和 进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一 内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。 线程可与属于同一 进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有 系统资源,只拥有一点在运行中必不可少的信息(如 程序计数器、一组 寄存器和栈)。

操作系统分类

根据 进程与 线程的设置, 操作系统大致分为如下类型:
(1)单 进程、 单线程, MS-DOS就是这种 操作系统;
(2) 多进程、 单线程,多数UNIX(及类UNIX的LINUX)是这种 操作系统;
(3) 多进程、 多线程,Win32(Windows NT/2000/XP等)、Solaris 2.x和OS/2都是这种 操作系统;
(4)单 进程、多线程,VxWorks是这种 操作系统。

引入线程的好处

在 操作系统中引入 线程带来的主要好处有:
(1)通过 进程来创建、终止 线程比单独地通过 应用程序来创建、终止 线程要快;
(2)同一 进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。另外, 线程的出现还有以下几个原因:
① 并发程序的并发执行,在多处理环境下更为有效。一个 并发程序可以建立一个 进程,而这个并发程序中的若干并发程序段就可以分别建立若干 线程,使这些线程在不同的处理机上执行。
②每个 进程具有独立的 地址空间,而该进程内的所有 线程共享该地址空间。这样可以解决 父子 进程模型中,子进程必须复制 父进程 地址空间的问题。
③ 线程对解决 客户/服务器模型非常有效。

编辑本段进程作用

进程间通信(IPC)

Win32 进程间通信的方式主要有:
(1) 剪贴板(Clip Board);
(2) 动态数据交换(Dynamic Data Exchange);
(3)部件对象模型(Component Object Model);
(4)文件映射(File Mapping);
(5)邮件槽(Mail Slots);
(6)管道(Pipes);
(7)Win32 套接字(Socket);
(8) 远程过程调用(Remote Procedure Call);
(9)WM_COPYDATA消息(WM_COPYDATA Message)。

获取进程信息

在WIN32中,可使用在PSAPI .DLL中提供的Process status Helper函数帮助我们获取 进程信息。
(1) EnumProcesses()函数可以获取 进程的ID,其原型为:
BOOL EnumProcesses(DWORD * lpidProcess, DWORD cb, DWORD*cbNeeded);
参数lpidProcess:一个足够大的DWORD类型的 数组,用于存放 进程的ID值; 参数cb:存放进程ID值的数组的最大长度,是一个DWORD类型的数据;
参数cbNeeded:指向一个DWORD类型数据的 指针,用于返回 进程的数目;
函数返回值:如果调用成功,返回TRUE,同时将所有 进程的ID值存放在lpidProcess参数所指向的 数组中,进程个数存放在cbNeeded参数所指向的 变量中;如果调用失败,返回FALSE。
(2)GetModuleFileNameExA()函数可以实现通过 进程句柄获取 进程文件名,其原型为:
DWORD GetModuleFileNameExA(HANDLE hProcess, HMODULE hModule,LPTSTR lpstrFileName, DWORD nsize);
参数hProcess:接受 进程句柄的参数,是HANDLE类型的 变量;
参数hModule: 指针型参数,在本文的程序中取值为NULL;
参数lpstrFileName:LPTSTR类型的 指针,用于接受主调函数传递来的用于存放 进程名的字符 数组指针;
参数nsize:lpstrFileName所指 数组的长度;
函数返回值:如果调用成功,返回一个大于0的DWORD类型的数据,同时将hProcess所对应的 进程名存放在lpstrFileName参数所指向的 数组中;如果调用失败,则返回0。
通过下列代码就可以遍历 系统中的 进程,获得进程列表:
//获取当前进程总数
EnumProcesses(process_ids, sizeof(process_ids), &num_processes);
//遍历进程
for (int i = 0; i < num_processes; i++)
{
//根据进程ID获取句柄
process[i] = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0,
process_ids[i]);
//通过句柄获取进程文件名
if (GetModuleFileNameExA(process[i], NULL, File_name, sizeof(fileName)))
cout << fileName << endl;
}
进程与线程 当 Context Switch 发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java 中对应的概念就是程序计数器(Program Counter Register),它的作用是记住下一条 jvm 指令的执行地址,是线程私有的。操作系统中有一个组件叫做任务调度器,将 CPU 的时间片(windows 下时间片最小约为 15ms)分给不同的程序使用,只是由于 CPU 在线程间(时间片很短)的切换非常快。多核 CPU 下,每个核(core)都可以调度运行线程,这时候线程是可以并行的。 阅读详情

相关推荐

C++语言程序设计教程第4版杨进才沈显君课后习题答案解析

为了更好地学习这门课程,我尝试在网上寻找一些学习资料和参考书籍,但效果并不是很理想。因此,我希望能有一些学长学姐或者是有经验的程序员能够分享一些学习经验和方法,让我更好地掌握这门课程。学习过程中,我发现这本书的内容非常丰富,讲解也非常详细,对于像我这样编程基础薄弱的学生来说,是一本非常实用的教材。同时,我也希望有经验的程序员能够推荐一些适合初学者的C++语言学习资料和工具,以便我能更好地学习和掌握这门课程。总之,希望能得到大家的帮助和支持,让我更好地学习和掌握C++语言程序设计。主 编: 杨进才,沈显君。

weixin_58833001的博客 1333

进程和线程区别

1.进程和线程 1.1 概述: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个

littesss的博客 353

即梦文生视频逆向接口部署使用

有的小伙伴不知道这个地址如何填写,你可以理解是步骤3上提供的 服务器或者本地电脑IP 地址(不要写 http://127.0.0.1 或者http://localhsot ) 是 (192.168.XXX.XXX 参考)

weixin_44245188的博客 3185

什么是进程,什么是线程,什么时候用进程,什么时候用线程

什么是进程什么是线程?进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程进程可以认为是程序执行时的一个实例。进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。一个进程无法直接访问另一个进程的变量和数据结构, 如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道,文件, 套接字等。一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 线程与进程的一个...

qq_40395404的博客 1万+

CamoFox MCP:让AI助手隐身操作浏览器的反检测自动化实战

浏览器自动化是提升工作效率和实现数据采集的关键技术,其核心原理在于通过程序脚本模拟人类在网页上的交互行为。传统方案如Selenium或Playwright虽功能强大,但需要开发者编写复杂脚本并处理反爬机制。随着AI Agent技术的发展,自然语言驱动的自动化成为新趋势,它能将任务规划与逻辑判断交由AI处理,大幅降低使用门槛。Model Context Protocol(MCP)作为连接AI与外部工具的标准协议,在此场景下价值凸显,它使得AI助手能直接调用丰富的浏览器操作工具。CamoFox MCP创新性地将

weixin_42551967的博客 726

SPSS_Process—简单&平行&链式中介模型

本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。

m0_54401011的博客 4万+

什么是进程?什么是线程?进程与线程的区别?

目录 什么是进程?什么是线程? 为什么要有线程? 进程与线程的区别? 进程与线程的选择取决条件? 什么是进程?什么是线程? 进程:进程是并发执行程序在执行过程中资源分配和管理的基本单位(资源分配的最小单位)。进程可以理解为一个应用程序的执行过程,应用程序一旦执行,就是一个进程。每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据...

xzp_12345的博客 1万+

电压电流双闭环PFC单相PWM整流

电压电流双闭环PFC单相整流。仿真及代码

xht2403267701的博客 6052

进程是什么,线程又是什么,进程与线程的区别是什么

今天学习Python的时候看到了进程与线程部分,突然问自己什么是进程什么是线程,他们的区别又是什么。但是想了想,还是发现脑子里面并没有很具体的一个定义与区别。当时想的是进程不就是比较小的程序单位吗,线程不就是比进程更轻量级的更小的进程吗。。。但是,其实我自己也知道这肯定不对,但是符合很大一部分同学对进程与线程的概念了。but,咱们不能这么简单粗暴不求甚解啊,又不是陶渊明。然后咱不耻下问,跑去问度娘...

C2496649361的博客 3796

【产品经理修炼之道】- 优惠券系统从入门到精通(一)

为了满足企业的优惠券业务,优惠券系统一般需要包含哪些功能?这篇文章里,作者从架构、功能等维度做了拆解,一起来看看吧。此部分主要讲解为满足公司优惠券业务,需要优惠券系统必须包含哪些功能,即优惠券架构图。

xiaoli8748的专栏 1810

基于JeecgBoot 3.9.0 开源项目的企业管理平台

基于JeecgBoot 3.9.0 开源项目的企业管理平台

宁波阿成的博客 374

进程线程子线程

一个线程指的是进程中一个单一顺序的控制流(或者说是执行路线、执行流), 一个进程中可以创建多个线程, 多个线程实现并发运行, 每个线程执行不同的任务。使用Handler的主要作用就是在后面的过程中发送和处理Message对象和让其他的线程完成某一个动作(如在工作线程中通过Handler对象发送一个Message对象,让UI线程进行UI的更新,然后UI线程就会在MessageQueue中得到这个Message对象(取出Message对象是由其相关联的Looper对象完成的),并作出相应的响应)。

u014598642的专栏 1102

【YOLO11改进 - C3k2融合】C3k2融合DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1055

什么是进程、什么是线程(进程、线程的全方面解析)

进程和线程是操作系统的核心概念。进程是程序执行的实例,拥有独立的内存空间和资源,是资源分配的基本单位,创建和切换开销较大。线程是进程内的执行单元,共享进程资源,是CPU调度的基本单位,创建和切换更轻量级。进程间通信需通过系统机制,线程间可直接共享内存但需同步。进程崩溃不影响其他进程,而线程崩溃可能导致整个进程终止。现代操作系统采用混合线程模型,协程提供了更轻量的并发方案。多线程编程需重点解决线程安全问题。进程提供隔离环境保障稳定性,线程实现高效并发提升性能,两者结合应用可满足不同场景需求。

qq_54556560的博客 2331

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

进程、线程、协程

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。首先这三者是有明显的大小关系进程 > 线程 > 协程一个进程可以有多个线程,一个线程里面可以有多个协程例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

啊猪是的读来过倒的博客 2587

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Linux 线程与进程】线程与进程技术基础

线程是CPU调度的最小单位,属于同一进程的线程共享进程的全局内存、文件描述符等资源,但拥有独立的栈和程序计数器。进程是操作系统资源分配的基本单位,每个进程拥有独立的虚拟地址空间、文件描述符、信号处理等资源。系统调用创建子进程,子进程复制父进程的资源(写时复制优化)。‌是经典的同步问题,通过互斥锁保护共享资源,条件变量实现线程间协调。‌:进程间资源隔离,崩溃不会直接影响其他进程46。‌:高效数据共享,需配合信号量同步。‌:结构化数据传输,支持多进程通信。‌:单向通信,适用于父子进程。回收资源,避免僵尸进程。

以实战经验介绍行业知识 1462

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

线程中可以创建进程吗_Java中进程、线程

一、进程一个在内存中运行的应用程序,是并发执行的程序在执行过程中分配和管理资源的基本单位。如QQ、微信等已启动就会创建一个对应的进程,并以此为单位为其分配系统资源。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程。二、线程进程中的一个执行任务,负责当前进程中程序的执行。是进程的一个执行单元,是进程内调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。一个进程至少有一个线程,...

weixin_39942191的博客 2271

进程,线程,进程与线程

进程    进程的存在,是为了让多个程序可以并发执行。举个例子,意思就是,我想在编辑文档的时候,同时听听音乐。所以也可以类似于网上大多数资料的说法,一个进程,就代表一个程序。 这里就涉及到了一个问题,如何去描述不同的程序。这个问题的本质意义在于,程序在计算机中的存储形态都是一致的,如何对他们加以区分,使得可以界定他们为不同的程序。 为此,操作系统为每个进程,分配了一个专门的数据结构,PC...

weixin_39989638的博客 604

线程和进程的区别与联系以及单线程多进程与单进程多线程的区别

线程和进程 概念 进程(process):是指具有已一定功能的独立程序,是系统资源分配的基本单位,在内存中有其完备的数据空间和代码空间,拥有完整的虚拟空间地址。一个进程所拥有的数据和变量只属于它自己。 线程(thread):是进程内相对独立的可执行单元,所以也被称为轻量进程(lightweight processes);是操作系统进行任务调度的基本单元。它与父进程的其它线程共享该进程所拥有的全部代...

VicterTian的博客 3414

进程和线程区别?什么时候用线程、进程

————————————————————————————————·首先要明确一点:**进程的定义,线程的定义?**进程:是计算机中程序关于某个数据集合的一次运行活动;线程:是程序执行流的最小单元;从定义当中可以看出,进程之下有线程,也就是说,一个进程至少有一个线程,同时一个线程只能属于一个进程。那么,线程就是进程的一个实体。**笔者是这样理解二者之间的关系:**大家还记得大象装冰箱的故事吗?CPU...

开干 2224

进程和线程

虽然多进程也能实现 并发编程,但是由于进程太重量,效率不高,创建进程、销毁进程、进程调度时间的消耗较多,主要消耗在申请资源, 线程比进程更轻量,线程之间共享进程的内存空间和硬盘资源,创建线程,不需要重复去申请资源,省去了这一部分的开销 ,提高了系统的效率和资源利用率。PCB是操作系统进行进程调度和管理的基础,当操作系统需要切换进程时,会保存当前进程的上下文信息到其对应的PCB中,然后加载下一个将要执行的进程的PCB,并将其上下文信息恢复,从而实现进程的切换。方法1 继承 Thread 类。

qq_54176670的博客 793

进程、线程、协程、多线程、多进程、线程池、进程池——python

进程、线程、协程、多线程、多进程、线程池、进程池

YYHao 472
上一篇: 五、总观Application Framework
下一篇: fatal error RC1004: unexpected end of file found处理方法
imsaws
博客等级 码龄18年 9粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值