用户线程 V.S. 内核线程

线程有两种实现方式

    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线程跟内核轻量级进程有一一对应的关系。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.