什么是线程
线程是进程的一部分,是cpu调度的最小单位。每个线程拥有自己的堆栈及寄存器的保存。线程和进程一样至少有 就绪 运行 等待 三种状态。
为什么要引出线程的概念
我们可以想象一个场景,假如我们要实现一个播放音频文件的功能,首先需要我们从磁盘中读取音频文件,然后进行解压缩,然后在进行播放。为了完成这个任务,我们可以申请三个进程来分别执行这三个过程。但是我们需要这三个进程之间进行频繁的通信,而进程的设计(独立性)就是为了隔离各个进程,使用每个进程独立运行。若是要在进程间共享数据,就需要操作系统内核的帮助,开销很大,而且也不太符合进程当初设计的目的。因此设计师们引出了线程这一概念来解决这一问题。在一个进程内部,申请三个线程来并发执行这三个过程,因为这三个线程再同一个进程中,因此他们可以很容易的共享数据。
线程的特点
1.线程间可以并发执行
2.线程间共享同一块地址空间
用户线程
由一组用户级的线程库来完成对线程的管理(创建 终止 调度 同步)。线程控制块记录在进程内部。
优点:
1.可以在不支持多线程的操作系统中运行
2.线程之间切换速度快
缺点:
1.由于操作系统并不知道是多线程进程,因此一个线程由于系统调用而阻塞时,所有进程都会被阻塞。
2.并不支持线程层次的处理机抢占(只能由正在执行的线程主动放弃,其他线程才能执行)。
3.时间片是按多进程分配的,因此对于每个线程来说,分配的时间片太少了。
内核线程
由内核通过系统调用来实现线程。由内核完成对线程的管理(创建 终止 调度 同步)。线程控制块在内核中,进程控制块中有相应指针指向他的线程控制块。
优点:
1.线程执行系统调用时,其他线程不会被阻塞。
2.多线程程序可以获得更多的时间片。
缺点:
1.线程的切换开销大。