0
点赞
收藏
分享

微信扫一扫

c嵌入式开发——进程与线程的差别以及线程中共享的资源和私有的资源

架构大数据双料架构师 2022-04-25 阅读 61
java

一、进程与线程的差别

首先来看看进程与线程的定义

进程:是资源分配的基本单位,是程序执行的一次实例

线程:线程是程序执行时的最小单位,是进程的一个执行流,是cpu调度和分配的基本单位,一个进程可以由多个线程组成

区别:

①进程是资源分配的最小单位,线程是程序执行的最小单位

进程有自己独立的地址空间(虚拟地址空间),每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵,而线程是共享进程中的数据的使用相同的地址空间,因此cpu切换一个线程的花费远比进程小得多,同时创建一个线程的开销也比进程要小

总结:创建一个进程开销比创建一个线程大,并且对进程进行上下文切换比对进程进行上下文切换花费大

③线程之间通信更方便,同一进程下的线程共享进程的公有数据,便于进行通信,而进程间进行通信需要以IPC方式进行,但是多线程处理共享资源的互斥和同步是多线程程序的难点

④但是多进程程序更健壮,进程间不会互相影响,一个进程的崩溃不会影响其他程序多线程程序只要有一个线程死掉了整个进程都死了

二、线程中共享的资源和私有的资源

共享的:

①进程代码段

②进程的公有数据(利用这些数据,线程很容易实现相互之间的通讯)

③进程打开的文件描述符

④信号处理器

⑤进程ID

⑥进程组ID

补充知识:

进程组:一组协同工作或关联进程的组合,每个进程组由ID(PGID),每个进程都属于一个进程组,默认地,一个子进程和它的父进程属于一个进程组,一个组的组长一般是该组第一个创建出来的进程,组长的ID和进程组的ID相同(可以设置进程组的ID不等于组中任何一个进程的ID吗,插个眼)

私有的:

线程ID:每个线程都有自己的线程ID,这个ID在本进程中是唯一的,进程用此来标识线程

寄存器组的值:由于线程是并发运行的,每个线程都有自己不同的运行线索,当从一个线程切换到另一个线程的时候,必须将原有的线程寄存器集合的状态保存(猜测是保存在栈上,插个眼),以便将来该线程在被重新切换回来时可以得到恢复,cpu上的每个核都有自己独立的寄存器,当线程运行时使用独立的寄存器进行存储

③线程的堆栈:堆栈指的是平常我们说的“栈”,不要搞混了,线程函数可以调用函数,而被调用函数又是可以层层嵌套的,所以线程必须拥有自己的函数堆栈,使得函数调用可以正常执行,不受其他线程的影响

错误返回码不是很懂。插个眼

线程的信号屏蔽码:由于每个线程所感兴趣的信号不同,所以线程的信号屏蔽码应该由线程自己管理。但所有线程都共享同样的信号处理器

线程的优先级:由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程的优先级

举报

相关推荐

嵌入式Linux-线程的开始

0 条评论