线程有两种实现方式:
1. 内核直接支持,称为内核线程
2. 用户态的程序自己实现,称为用户线程
================================================================
用户线程在用户态运行,所以创建、切换都比内核线程效率高
但是,内核不知道用户线程的存在,它只知道用户进程;当进程中的一个线程被阻塞时,会导致整个进程被阻塞。 内核线程就没有这个问题。
同理,由于一个进程中的多个用户线程在内核里只对应一个执行绪,所以这种机制无法利用多处理器的能力。
=============================================================================
两种线程机制并不是互斥的。在有的系统中,可以把用户线程按1:1或m:n映射到内核线程上.
用户线程的典型例子是POSIX的Pthread, 而很多UNIX都支持内核线程。
Linux中没有线程。你可以通过clone()来创建一轻量的子进程,这个子进程并不会复制父进程的所有数据,而是通过一个指针指向父进程的数据结构,从而与父进程共享资源和地址空间。
clone()一般与pthread联合使用,即用phtread作为API,clone()作为实现。
=============================================================================
Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程。
Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的。Linux 2.6上的HotSpot使用了NPTL机制,JVM线程跟内核轻量级进程有一一对应的关系。