- 前言
- 线程概念
- 线程和进程关系
- 根据学习阶段的不同,对pcb有不同的理解
- 线程之间的独有与共享
- 多线程/多进程进行多任务处理的优缺点分析
前言
多线程:非常重要----以后工作中用得非常多
多线程-----线程概念/线程控制/线程安全/线程基本应用
线程概念
线程:线程是进程中的一条执行流
以前我们学习进程的时候,我们说进程就是一个pcb,是程序动态运行的描述,通过pcb可以实现操作系统对程序运行的调度管理。
在最早时候,进程是一个pcb,操作系统通过pcb实现程序的运行调度管理;然而学习多线程,因为线程是进程中的一条执行流,linux下通过pcb实现的,因此linux下的pcb实际上是一个进程,并且这些pcb共用同一个虚拟地址空间,这些pcb更加轻量化,因此linux下的线程也被称为轻量级进程


线程和进程关系
linux下的进程其实是一个线程组,一个进程中可以有多个线程(多个pcb),线程是进程中的一条执行流,类似于进程就是一个工厂,线程就是工厂中干活的人(Linux下干活的就是pcb)
在linux中,pcb就是调度程序运行的描述,一个pcb就可以调度一段程序的运行;
线程是进程中的一条执行流,而这个执行流Linux下就是通过pcb实现的,因此线程是一个pcb;并且这些pcb共享了进程中的大部分资源,因此相较于传统pcb更加轻量化。
进程:是一个程序动态的运行,其实就是一个程序运行的描述-pcb
线程:是进程中的一条执行流,执行一个程序中的某段代码
在linux操作系统内核中,其实没有线程的概念,只有轻量级进程的概念
一个进程中至少会有一个线程
根据学习阶段的不同,对pcb有不同的理解
第一阶段:pcb是进程,用于调度一个程序运行;
第二阶段:pcb是线程,是轻量级进程(就是为了跟印象中的传统进程加以区分),因为线程是运行中程序的一条执行流,linux下通过pcb实现这个执行流,并且共用同一份运行资源
进程是操作系统资源分配的基本单位(操作系统会为一个程序的运行分配所需的所有资源)
线程是cpu调度的基本单位;
线程之间的独有与共享
独有:标识符,寄存器,栈,信号屏蔽字,errno
共享:虚拟地址空间(代码段/数据段),文件描述符表,信号处理方式,用户ID/组ID/工作路径
为什么信号是先注销,再处理?:信号是针对整个进程通知时间进行处理的,但是一个信号只需要被处理一次就够了,然而一个进程有可能会有多个执行流,到底是谁处理这个事件(谁拿到时间片,谁能处理谁处理),有的线程不希望操作被信号被打断,就可以独立屏蔽这个信号----信号屏蔽字独有原因
使用vfork创建一个子进程;父子进程共用同一个虚拟地址空间,但是父进程会阻塞直到子进程exit或者程序替换;
多线程,多个pcb作为独立执行流肯定是要同时运行,如何做到不会调用栈混乱----栈独有的原因
errno:系统调用完毕后重置的一个全局变量
多线程/多进程进行多任务处理的优缺点分析
多线程优点:
- 线程间的通信更加灵活方便
- 线程的创建与销毁成本更低
- 同一个进程中的线程间调度成本更低
多进程的优点:
- 多进程的健壮性,稳定性更高(异常以及一些系统调用exit直接针对整个进程有效)
共同的优点:提高程序中的处理效率
- IO密集型程序
- CPU密集型程序