为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
富国沪深 2021-07-29 13:40:56
是否有可能编写一个 Java 编译器或虚拟机,让您编译使用线程和阻塞系统调用的遗留 Java 应用程序,就像编译 GO 程序一样。因此 new Thread().run(); 将创建轻量级线程,所有阻塞系统调用将改为异步操作系统调用并使轻量级线程屈服。如果不是,那这不可能的主要原因是什么!
查看完整描述

2 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

Sun 在 Solaris(和其他 UNIX 系统)上的 Java 运行时的早期版本使用了称为“绿色线程”的用户空间线程系统。如Java 1.1 for Solaris 文档中所述:

多对一模型(多个用户线程到一个内核线程)的实现允许应用程序创建任意数量的可以并发执行的线程。在多对一(用户级线程)实现中,所有线程活动仅限于用户空间。此外,一次只有一个线程可以访问内核,因此操作系统只知道一个可调度实体。因此,这种多线程模型提供有限的并发性并且不利用多处理器。Java 线程在 Solaris 系统上的最初实现是多对一的,如下图所示。

这很早就被操作系统的线程支持所取代。在Solaris中的情况下,之前的Solaris 9,这是一个M:N“多对多”类似于转到系统,其中所述线程库调度若干程序线程在内核级线程的较小数目的。在 Linux 和较新版本的 Solaris 等使用 1:1 系统的系统上,用户线程与内核级线程直接对应,情况并非如此。

从那时起,我认为没有任何严肃的计划让 Sun/Oracle JVM 不再使用本机线程库。正如历史所表明的那样,JVM 肯定可以使用这样的模型,但它似乎不被认为是一个值得追求的方向。


查看完整回答
反对 回复 2021-08-02
  • 2 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信