编译 Java 使其表现得像 GO 代码

是否有可能编写一个 Java 编译器或虚拟机,让您编译使用线程和阻塞系统调用的遗留 Java 应用程序,就像编译 GO 程序一样。

因此 new Thread().run(); 将创建轻量级线程,所有阻塞系统调用将改为异步操作系统调用并使轻量级线程屈服。

如果不是,那这不可能的主要原因是什么!


富国沪深
浏览 174回答 2
2回答

繁星淼淼

Sun 在 Solaris(和其他 UNIX 系统)上的 Java 运行时的早期版本使用了称为“绿色线程”的用户空间线程系统。如Java 1.1 for Solaris 文档中所述:多对一模型(多个用户线程到一个内核线程)的实现允许应用程序创建任意数量的可以并发执行的线程。在多对一(用户级线程)实现中,所有线程活动仅限于用户空间。此外,一次只有一个线程可以访问内核,因此操作系统只知道一个可调度实体。因此,这种多线程模型提供有限的并发性并且不利用多处理器。Java 线程在 Solaris 系统上的最初实现是多对一的,如下图所示。这很早就被操作系统的线程支持所取代。在Solaris中的情况下,之前的Solaris 9,这是一个M:N“多对多”类似于转到系统,其中所述线程库调度若干程序线程在内核级线程的较小数目的。在 Linux 和较新版本的 Solaris 等使用 1:1 系统的系统上,用户线程与内核级线程直接对应,情况并非如此。从那时起,我认为没有任何严肃的计划让 Sun/Oracle JVM 不再使用本机线程库。正如历史所表明的那样,JVM 肯定可以使用这样的模型,但它似乎不被认为是一个值得追求的方向。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go