什么是用户线程?下面的解释说它们是由用户空间管理的......请解释一下如何?
线程有时在用户空间库中实现,因此称为用户线程。内核不知道它们,因此它们在用户空间中进行管理和调度。
什么是用户线程?下面的解释说它们是由用户空间管理的......请解释一下如何?
线程有时在用户空间库中实现,因此称为用户线程。内核不知道它们,因此它们在用户空间中进行管理和调度。
如今,每一个现代服务器或桌面操作系统,以及所有主要的移动操作系统,都有一个本地线程库,所以这个问题不再那么重要了。但基本上,在此之前,有一些库——最著名的是“绿色线程库”——它将协作多任务线程实现为用户库。“协作多任务”部分是重要的部分:一般来说,只有当线程调用某些允许切换发生的方法(“sleep”、“yield”等)时,这样的库才会从一个线程切换到另一个线程。图书馆一般不能做抢占式时间分片;这是必须在操作系统级别完成的事情。
Symbian OS has an Active Object framework that allows async event handling in a single thread http://en.wikipedia.org/wiki/Active_object_%28Symbian_OS%29
Windows also has Fibres: http://msdn.microsoft.com/en-us/library/ms682661%28v=vs.85%29.aspx
内核线程(也称为轻量级进程)由系统处理。它们提供了几个有趣的好处,主要是可以在两个不同的处理器上调度两个线程,希望这会减少进程的执行时间。
然而,线程经常被用作编程模型。一个典型的例子是一个多客户端网络服务器,它等待传入的连接并同时与其连接的客户端交换数据。在这种情况下,程序员可能希望创建大量线程并在它们之间快速切换。系统线程不是很适应这个。内核线程的数量是有限的(只有很少的未读),并且任何基本操作(创建销毁切换锁定)都是昂贵的,因为它必须在内核空间中执行。
另一方面,用户线程可以使用用户set_jmp()
库long_jmp()
在用户库中实现。由于它们不涉及内核,因此应用程序可以非常有效地创建/销毁和在用户线程之间切换。
正如 Ernest 所说,用户线程不再很常见,但是存在可以利用这两个世界的混合解决方案。
http://en.wikipedia.org/wiki/Thread_(computer_science)#N:M_.28Hybrid_threading.29