程序、进程、线程的区别

article/2025/9/30 15:03:49

程序、进程、线程的区别

进程是程序的实体,而线程又是进程的实体。进程又是线程的容器。
请添加图片描述

程序、进程、线程三者区别如下:

1.程序:程序并不能单独执行,是静止的,只有将程序加载到内存中,系统为其分配资源后才能够执行。

2.进程:程序对一个数据集的动态执行过程,一个进程包含一个或者更多的线程,一个线程同时只能被一个进程所拥有,进程是分配资源的基本单位。进程拥有独立的内存单元,而多个线程共享内存是该线程可与同属进其他线程共享该进程所拥有的全部资源。每一个独立的线程,都有一个程序运行的入口、顺序执行序列和程序的出口。

3.线程:线程是进程内的基本调度单位,线程的划分尺度小于进程,并发性更高,线程本身不拥有系统资源,但是该线程可与同属进其他线程共享该进程所拥有的全部资源。每一个独立的线程,都有一个程序运行的入口、顺序执行序列和程序的出口。

4.进程、线程区别(可执行命令,用户id,)

1.一个进程可以包含至少一个线程,一般来说也就是主线程,而一个线程只能属于一个进程;
2.进程拥有独立的内存,而线程没有独立的资源空间, 只是暂时存储在计数器,寄存器,栈中,
同一个进程间的线程可以共享资源。
3.将代码放入到代码区之后,进程产生,但还没执行,我们所说的执行一般是是主线程main函数开始执行。
4.进程比线程更加消耗资源
5.进程对资源的保护要求高,而线程要求不高
6.进程是处理器这一层面的抽象,而线程是进程的基础上进一步并发的抽象
7.同一个进程下,一个线程的挂掉,会导致整个进程的挂掉,而进程之间不会相互影响
8.总的来说:我们都知道程序不能单独运行,只有将它放入内存中,分配资源才能运行,程序是指令的集合,
而进程是程序的一次执行活动,属于动态概念
9.我们可以打个比方:进程相当于某一个大型项目,世界上可能有人同时在做这个项目,有其独特的方式;
而线程就相当于这个项目下的一些程序员,多个程序员去完成这一个项目肯定要比一个人完成快的多,
也就是能在同一时间操作。

5.每个应用程序都使用一块内存区域,这个内存区域可以称为一个进程,内存区域中是需要执行代码的,具体执行代码就是线程去执行的。 注意:进程只是负责开辟内存空间的,线程才是负责执行代码逻辑的执行单元。

/*
fork()函数
函数的一般形式:
pid_t fork(void);
返回值:成功返回0,表示子进程;大于零表示父进程;失败返回 -1,并设置错误代码。
错误代码:
EAGAIN:当前的进程数已经达到了系统规定的上限
ENOMEM:内存不足
*/
#include
int main()
{
pid_t pid;
pid = fork();
if (pid < 0)//出错误
{
perror("fork error");
exit(1); // 0表示EXIT_SUCCESS;1表示EXIT_FAILURE
}
else if (pid > 0)//父进程
{
printf("This is the parent process, its ID is %d.\n", (int)getpid());
}
else//子进程
{
printf("This is the child process, its ID is %d.\n ", (int)getpid());
printf("This is the child process, its parent process's ID is %d.\n", (int)getppid());
}
return 0;
}

进程的五种状态

:(也可以简单理解为,创建,运行 等待 停止 死亡)

请添加图片描述

线程的创建

#include <pthread.h>
int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)
(void *),void *arg);thread:线程对象,每个线程对应一个线程对象。在使用之前得先定义出来,看它类型,
可以看出是pthread_t 类型的。
attr:这是线程属性,默认填缺省属性NULLvoid *(*start_routine)(void *);
//这个东西看起来复杂,其实就是填函数名,线程用一个函数去封装,所以填的这个函数名就是我们线程的入口。
//arg:填需要往线程里传递的参数。一次只能传递一个参数,想要传递多个参数的话,可以先定义一个结构体,
//传递结构体名,不想传递参数就填NULL。
从函数中可以看出返回值是int 类型的,创建线程成功返回0,失败则返回1,可用于判断线程是否创建成功。结束线程的函数:#include <pthread.h>  void pthread_exit(void *reatval);
//reatval 这个参数填的是线程结束时返回的信息,由等待线程函数接收,若不想返回信息,可填NULL。等待线程:就是主线程需要进行的操作,因为线程是共用主线程的同一片地址空间,所以假如主线程先结束,
那么子线程也随即结束。所以要想主线程在子线程后面结束就必须有这个等待函数 函数如下:#include <pthread.h>    int pthread_join(pthread_t thread,void **retval);
//thread 需要等待的线程对象
//retval 可以看出它是一个二级指针,二级指针需要传递一级指针,而且是void 类型的。
//用于接收结束线程函数返回的内容,可为NULL。

http://chatgpt.dhexx.cn/article/Q6KwcFGX.shtml

相关文章

操作系统-进程与线程的区别

操作系统-进程与线程的区别 1.什么是进程 简单的讲&#xff0c;进程是执行的程序&#xff0c;资源分配的最小单位。 进程包括&#xff1a;文本段&#xff08;程序代码&#xff09;、程序计数器的值、CPU寄存器的内容、堆、栈、数据段 进程的状态&#xff1a;新的、就绪、运行…

进程和线程的区别(重点)

来源&#xff1a;http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程&#xff0c;使得多线程程序的并发性高。 另外&#xff0c;进程在执行过程中拥有独立的内存单元&#xff0c…

进程与线程的区别和联系

程序并不能单独执行&#xff0c;只有将程序加载到内存中&#xff0c;系统为他分配资源后才能够执行&#xff0c;这种执行的程序称之为进程&#xff0c;也就是说进程是系统进行资源分配和调度的一个独立单位&#xff0c;每个进程都有自己单独的地址空间。所以说程序与进程的区别…

进程和线程的区别和联系

我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。 进程 进程是一个具有一定独立功能的程序在一个数据集上的一次动…

进程与线程的区别及联系

目录 1. 操作系统功能简介 2. 进程 2.1 认识进程 2.2 进程操作系统中如何管理 2.3 PCB如何描述 2.3.1 pid 2.3.2 内存指针 2.3.3 文件描述符表 2.3.4 进程调度相关属性 3. 内存管理 4. 线程 4.1 认识线程 4.2 进程与线程的关系 4.3 线程安全问题 1.操作系统功能简…

Linux进程与线程的区别

进程与线程的区别&#xff0c;早已经成为了经典问题。自线程概念诞生起&#xff0c;关于这个问题的讨论就没有停止过。无论是初级程序员&#xff0c;还是资深专家&#xff0c;都应该考虑过这个问题&#xff0c;只是层次角度不同罢了。一般程序员而言&#xff0c;搞清楚二者的概…

win10安装时,提示“我们无法创建新的分区,也找不到现有分区”

win10安装时&#xff0c;提示“我们无法创建新的分区&#xff0c;也找不到现有分区”&#xff0c;如图所示&#xff1a; 解决办法&#xff1a; 将win10安装包&#xff08;ios文件&#xff09;解压&#xff0c;将以下文件复制到系统盘&#xff0c;然后重启电脑&#xff0c;自动…

我们无法创建新分区。【错误:0x80042468】

一台服务器6块1.8T SAS 10K&#xff0c;做RAID10. 安装windows server 2012R2系统在分区时报错&#xff0c;总有个分区不能创建成功。&#xff08;正常安装系统后&#xff0c;磁盘管理也有一个磁盘不能创建新的分区&#xff09; 提示“我们无法创建新分区。【错误&#xff1a;0…

重装系统“无法创建新的分区也找不到现有分区”

如题&#xff0c;一开始我使用分区工具对硬盘进行分区后再进入安装系统&#xff0c;一直出现这个问题报错。 (因我没拍照片&#xff0c;从网上找的图片&#xff0c;侵权请联系我) 后来我删除硬盘分区&#xff0c;直接在这里进行分区&#xff0c;就可以装了。如图&#xff0c…

解决无法创建新的分区,也找不到现有的分区。

注意&#xff1a;问题多发生在m2装系统&#xff08;要拔出其他硬盘&#xff09; 原创b站理想与天阳

关于windows安装过程中“我们无法创建新的分区,也找不到现有的分区”问题解决办法

最近在安装电脑系统过程中碰到了这个问题&#xff0c;首先说明下我电脑bios已经设置了uefi引导启动&#xff0c;硬盘分区格式也是GPT格式&#xff0c;还是出现这个问题有点纳闷&#xff0c;后面折腾了好久才找到解决办法&#xff1a; 即在对磁盘进行分区的时候不要创建ESP分区…

系统安装无法创建新的系统分区的解决方法

在安装Windows7时&#xff0c;想必有很多人都安碰到这样的情况吧!在安装界面里选择安装时&#xff0c;却出现“安装程序无法创建新的系统分区&#xff0c;也无法定位现有系统分区” 安装程序无法创建新的系统分区&#xff0c;也无法定位现有分区 网上提供的另外解决方法大全&a…

服务器系统安装提示无法创建新的系统分区,提示无法创建新的分区是怎么回事_安装win10系统无法新建分区的解决办法...

不少朋友在装win10的过程中&#xff0c;可能会遇到“我们无法创建新的分区&#xff0c;也找不到现有的分区”的提示&#xff0c;那么我们应该如何操作来解决此问题呢?下面就给大家讲解安装win10系统无法新建分区的解决办法。 安装win10系统无法新建分区的解决办法&#xff1a;…

Win10提示“无法创建新的分区也找不到现有的分区”

1 Win10提示“无法创建新的分区也找不到现有的分区” 由于公司电脑拷贝账户时&#xff0c;不小心&#xff0c;将原有的桌面文件夹直接替换&#xff0c;而不是将桌面内的文件替换&#xff0c;差生了诸多的问题&#xff1a; 我的电脑—打开后无法正常看到驱动器酷我无法切换歌曲…

启动盘安装windows系统时提示:“windows安装程序无法创建新的分区,也找不到现有分区”的解决方法

在使用启动盘安装Windows系统时有时会遇到无法安装的问题&#xff0c;选定主分区或新建主分区出现“windows安装程序无法创建新的分区&#xff0c;也找不到现有分区”的提示信息&#xff0c;导致安装失败。提示信息如下图所示&#xff1a; 出现这种问题就很头疼&#xff0c;我…

安装win10提示“我们无法创建新的分区,也找不到现有分区”的解决方法

用U盘安装操作系统&#xff0c;但是遇到了这种问题。——我是用微软官方工具制作的启动盘&#xff0c;因为是给M.2 NVME固态硬盘装win10&#xff0c;不能用pe。 虽然我用DiskGenius工具将硬盘格式化成GPT格式&#xff0c;但是安装时还是出问题。 出现这种情况可能是硬盘格式通…

win10:我们无法创建新的分区,也找不到现有的分区,

今日一朋友拜托我帮他笔记本升级安装win10。 加了一个内存条以后&#xff0c;就进入了安装win10的工作。 在选完我没有序列号&#xff0c;win10版本等等以后&#xff0c;一直跳出来的这个⚠信息挺烦人。(因手机没拍照片&#xff0c;从网上找到一张合适的&#xff0c;图片来源…

安装win10时,提示“我们无法创建新的分区,也找不到现有分区”

安装win10时&#xff0c;提示“我们无法创建新的分区&#xff0c;也找不到现有分区” 笔者在安装问10时&#xff0c;出现了“我们无法创建新的分区&#xff0c;也找不到现有分区”这个提示 查来查去&#xff0c;发现没有按照安装教程走&#xff0c;直接按照自己的想法格式化…

Win10安装提示“我们无法创建新的分区,也找不到现有的分区”的问题解决方案

公司今天新到联想M950t电脑主机&#xff0c;安装Windows10专业版系统时&#xff0c;提示“我们无法创建新的分区&#xff0c;也找不到现有的分区。有关详细信息&#xff0c;请参阅安装日志文件。” 参考了网上一些方法&#xff0c;比如进入CMD&#xff0c;输入一堆命令&#…