一、相关知识
用户级线程(ULT):实现在用户空间的线程称为用户级线程。用户线程是完全建立在用户空间的线程库,用户线程的创建、调度、同步和销毁全由用户空间的库函数完成,不需要内核的参与,也不需要进行用户态和内核态的切换,因此这种线程的系统资源消耗非常低,且非常的高效。用户级线程调度器在用户空间的线程库实现,内核并不知道用户线程的存在,因此只有一个处理器内核会被分配给该进程 ,也就不能发挥多核 CPU 的优势,无法做到真正意义上的并发,且如果一个进程内部有一个线程发生了阻塞,会导致这个进程(包括它的所有线程)都阻塞。
内核级线程(KLT):内核线程建立和销毁都是由操作系统负责、通过系统调用完成的。在内核的支持下运行,无论是用户进程的线程,或者是系统进程的线程,他们的创建、撤销、切换都是依靠内核实现的,但是调度开销要比用户线程更大。此外线程表是存放在操作系统固定的表格空间或者堆栈空间里,所以内核级线程的数量是有限的。