本篇内容主要讲解“线程和进程有哪些关系”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习”线程和进程有哪些关系”吧!
关系:1,一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。2,资源分配给进程,同一个进程的所有线程共享该进程所有资源。3,CPU分配给线程,即真正在处理器运行的是线程。4,线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
引用>进程是资源分配的基本单位,线程是CPU调度和分派的基本单位
线程是进程的一部分,一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程
每个进程都有独立的代码和数据空间(程序上下文),程序间的切换开销大,线程可看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程间切换开销小
在操作系统中能同时运行多个进程(程序),在同一个进程(程序)中多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
系统在运行的时候会为每个进程分配不同的内存空间,线程除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源
没有现成的进程可以看做单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,维斯多条线(线程)共同完成
线程是进程的一部分,故线程被称为轻权进程/轻量级进程
<强>进程与线程的关系强>
1,一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。
2,资源分配给进程,同一个进程的所有线程共享该进程所有资源。
3, CPU分配给线程,即真正在处理器运行的是线程。
4线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
<强>进程之间哪些可以共享? 强>
线程共享的环境包括:进程代码段,进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯),进程打开的文件描述符,信号的处理器,进程的当前目录和进程用户ID与进程组ID。
进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括:
<强> 1。线程ID 强>
,,,每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程。<强> 2。寄存器组的值强>
,,,由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便将来该线程在被重新切换到时能得以恢复。<强> 3。线程的堆栈强>
,,,堆栈是保证线程独立运行所必须的。
,,,线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程必须拥有自己的函数堆栈,使得函数调用可以正常执行,不受其他线程的影响。<强> 4。错误返回码强>
,,,由于同一个进程中有很多个线程在同时运行,可能某个线程进行系统调用后设置了errno值,而在该线程还没有处理这个错误,另外一个线程就在此时被调度器投入运行,这样错误值就有可能被修改。所以,不同的线程应该拥有自己的错误返回码变量。
<强> 5。线程的信号屏蔽码强>
,,,由于每个线程所感兴趣的信号不同,所以线程的信号屏蔽码应该由线程自己管理。但所有的线程都共享同样的信号处理器。<强> 6。线程的优先级强>
,,,由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程的优先级。<强>进程间通信的五种方式强>
<强> 1。(无名)管道强>
半双工,即不能同时在两个方向上传输数据。有的系统可能支持全双工。
只能在父子进程间。经典的形式就是管道由父进程创建,进程叉子进程之后,就可以在父子进程之间使用了。
<强> 2。命名管道(FIFO) 强>
不相关的进程也能够进行数据交换。
<强> 3。消息队列强>
消息队列,就是一个消息的链表,是一系列保存在内核中消息的列表。用户进程可以向消息队列添加消息,也可以向消息队列读取消息。
消息队列与管道通信相比,其优势是对每个消息指定特定的消息类型,接收的时候不需要按照队列次序,而是可以根据自定义条件接收特定类型的消息。
线程和进程有哪些关系