进程和线程
进程是承担分配系统资源的基本实体,线程是调度的基本单位。
线程共享进程数据,但也拥有自己的一部分数据:
- 线程ID。
- 硬件上下文数据(cpu寄存器的值)调度角度
- 各自的独立栈结构
- errno(C语言提供的全局变量,每个线程都有自己的。)
- 信号屏蔽字
- 调度优先级。
进程的多个线程共享
因为是在同一个地址空间,因此所谓的代码段(Text Segment)、数据段(Data Segment)都是共享的:
- 如果定义一个函数,在各线程中都可以调用。
- 如果定义一个全局变量,在各线程中都可以访问到。
除此之外,各线程还共享以下进程资源和环境:
- 文件描述符表。(进程打开一个文件后,其他线程也能够看到)
- 每种信号的处理方式。(SIG_IGN、SIG_DFL或者自定义的信号处理函数)
- 当前工作目录。(cwd)
- 用户ID和组ID。
进程和线程的关系
进程和线程的关系如下图:
在此之前我们接触到的都是具有一个线程执行流的进程,即单线程进程。