线程与进程
-
进程(ps -aux)
- 守护进程:控制终端并周期性执行任务或处理事件,不受用户登录或注销的影响
- 孤儿进程:父程序先退出了,子程序托付给了Init进程
- 僵尸进程:进程终止,但是父程序未获取其状态,需要保留部分信息
fork:父进程与子进程拥有相同的内存映像,同样的环境字符串和同样的打开文件(可写的内容是不可共享的)
进程的三种状态:
1.运行态:该时刻进程实际占用CPU
2.就绪态:可运行,因为其他进程正在运行而暂时停止运行
3.阻塞态:除非发生某种外部时间,否则进程不能运行
阻塞态不能直接到运行态
进程的状态转换
-
线程:并行实体拥有共享同一个地址空间和所有可用数据的能力,轻量级
进程与线程
线程的状态
- 运行
- 阻塞
- 就绪
- 终止
-
进程间通信(Inter Process Communication)
a. 匿名管道:半双工,用于父子进程和兄弟进程之间,单独构成一种独立的文件系统,缓冲区有限,无格式字节流
b. 命名管道:提供路径名与之关联,以文件形式存在于文件系统,只要能够访问该路径,就能够彼此通过命名管道通信,先进先出原则
c. 信号量:
- 信号是Linux系统中用于进程间互相通信或者操作的一种机制,信号可以在任何时候发给某一进程,而无需知道该进程的状态。
- 如果该进程当前并未处于执行状态,则该信号就有内核保存起来,知道该进程回复执行并传递给它为止。
- 如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消是才被传递给进程。
信号的生命周期
d. 消息队列: - 消息队列是存放于内核中的消息链表,每个消息队列由消息队列标识符表示
- 只有在内核重启时或显式地删除一个消息队列时,该消息队列才会被真正删除
- 不需要某个进程在等待消息的到达(与管道的差别)
- 先进先出原则,可以随机查询,也可以按照消息类型读取
e. 共享内存 - 多个进程可以直接读取同一块内存空间,是最快的IPC
- 为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。
- 需要同步与互斥
参考文献