绿线vs非绿线

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

要回复问题请先登录注册