我想了解此类线程提供的优势。
在哪些环境中,绿色线程比非绿色线程更好?有人说绿色线程更适合多核处理器。
任何预期的行为问题。
我想了解此类线程提供的优势。
在哪些环境中,绿色线程比非绿色线程更好?有人说绿色线程更适合多核处理器。
任何预期的行为问题。
Answers:
维基百科文章“绿色线程”对此做了很好的解释。
绿色线程是“用户级线程”。它们是由“普通”用户级进程而不是内核调度的。因此,它们可用于在不提供该功能的平台上模拟多线程。
特别是在Java上下文中,绿色线程已成为过去。请参见《JDK 1.1 for Solaris开发人员指南》。(这是关于Solaris的,但是不再使用绿色线程的事实对于通常的平台是有效的)。
从版本1.3开始,在Linux的Sun JVM中已放弃了绿色线程(请参阅archive.org上Linux平台上的Java [tm]技术)。可以追溯到2000年。对于Solaris,可以从JDK 1.2获得本机线程。那可以追溯到1998年。我什至认为Windows从来没有一个绿色线程实现,但是我找不到关于它的参考。
如Wikipedia文章所述,有一些例外,我主要收集低功耗(嵌入式)设备的信息。
绿色线程是在应用程序级别而非操作系统中实现的线程。通常在操作系统不提供线程API或无法按照您需要的方式工作时完成此操作。
因此,优点是您完全获得了类似线程的功能。缺点是绿色线程实际上不能使用多个内核。
有一些早期的JVM使用绿色线程(IIRC的Linux的Blackdown JVM端口使用了绿色线程),但是如今,所有主流JVM都使用真实线程。可能有些嵌入式JVM仍使用绿色线程。
绿色线程内存是从堆分配的,而不是由操作系统为其创建堆栈的。这可能潜在地使并发线程数量级增加或更多。正如其他人提到的那样,这不会自动利用多个处理器,但是用例通常是用于阻塞I / O的-例如,绿色线程可能允许您处理100k并发连接,而不是10k。
因此,换句话说,绿色线程在一定规模上更适合IO绑定操作。
当活动线程比处理器更多时,绿色线程比本地线程快得多。
Java最初支持绿色线程,但与大多数现代绿色线程实现不同,它无法在多个处理器上扩展,从而使Java无法利用多个内核。
然后,Java删除了绿色线程,以便仅依赖于本机线程。这使得Java线程比绿色线程慢。
请注意,我并不是在专门讨论绿色线程的Java实现,它确实有缺点,因为它与其他绿色线程的含义不同,无法在多核或多处理器系统中扩展。
绿色线程是用户级线程,而不是内核级线程。它们是由用户库而不是内核调度的。您可以拥有自己的调度机制来调度线程,而不是依赖于OS调度程序。
绿色线程可在不依赖任何本机OS功能的情况下模拟多线程环境,并且它们在用户空间而不是内核空间中进行管理,从而使它们可以在不具有本机线程支持的环境中工作
表演:
在多核处理器上,本机线程实现可以自动将工作分配给多个处理器,而绿色线程实现通常不能。绿色线程在线程激活和同步方面明显优于Linux本机线程。
当绿色线程执行阻塞系统调用时,不仅该线程被阻塞,而且进程内的所有线程也被阻塞。