线程的概念
线程是进程内部的一条执行序列,或者执行流。每个进程至少有一条线程,称之为主线程。从代码的角度看,就是main函数的函数体。在主线程中可以通过线程库创建其他函数线程。在同一个进程中的线程都是并发运行的,并且线程的执行顺序由系统决定。
主线程和函数线程没有本质的区别,只是主线程是进程执行时的第一条线程。主线程默认结束,结束的是整个进程。
线程的实现方式
线程的实现方式有三种:用户级、内核级、混合模式。
用户级线程:线程的创建、调度、销毁都在用户空间完成,内核只会识别其为一个进程。同时,用户态维护了一个线程表来管理线程。
优点:1.灵活性强,操作系统不知道线程的存在,在任何平台上都可以运行;2.线程的切换在用户空间完成,不需要陷入内核,速度较快;3.不用修改操作系统,内核实现简单。
缺点:1.编程复杂,用户必须自己管理线程,包括线程调度;2.如果一个线程阻塞,整个进程都会阻塞;3.不能使用对称多处理器。
内核级线程:线程的创建、管理、销毁由操作系统内核完成。
优点:1.内核线程使得用户编程简单;2.一条线程阻塞,操作系统可以立马切换到另一条线程,整个进程不会阻塞。
缺点:1.内核实现复杂,需要支持多线程;2.线程切换效率低,每次切换必须陷入内核。
混合线程:线程一部分由用户创建,一部分由内核创建,是一个多对多的关系,结合了用户级和内核级的优点。
进程和线程的区别
1.线程是CPU调度的最小单位,进程是资源分配的最小单位。
2.进程是线程的集合。进程中包含数据、资源,一个进程中的所有线程共享进程的数据、资源。
3.线程创建、管理代价小。线程调度、切换效率较高。
参考资料:《从哲学层次上看操作系统》 第5章 第3节