Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译Java使其行为类似于GO代码_Java_Multithreading_Compiler Construction_Go - Fatal编程技术网

编译Java使其行为类似于GO代码

编译Java使其行为类似于GO代码,java,multithreading,compiler-construction,go,Java,Multithreading,Compiler Construction,Go,是否有可能编写一个Java编译器或虚拟机,让您能够编译使用线程和阻塞系统调用的遗留Java应用程序,就像编译GO程序一样 因此,新的Thread.run;将创建轻量级线程,所有阻塞系统调用将改为异步操作系统调用,并使轻量级线程屈服 如果不是,这是不可能的主要原因是什么 Solaris和其他UNIX系统上Sun的Java运行时的早期版本使用了称为的用户空间线程系统。如以下文件所述: 多对一模型多用户线程对一内核线程的实现允许应用程序创建任意数量的可并发执行的线程。在多对一用户级线程实现中,所有线程

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

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


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

Solaris和其他UNIX系统上Sun的Java运行时的早期版本使用了称为的用户空间线程系统。如以下文件所述:

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

这在相当早的时候就被操作系统的线程支持所取代。在Solaris中,这是一个类似于Go的M:N多对多系统,线程库在较少的内核级线程上调度多个程序线程。在使用1:1系统(其中用户线程与内核级线程直接对应)的Linux和更新版本的Solaris等系统上,情况并非如此


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

Solaris和其他UNIX系统上Sun Java runtime的早期版本使用了用户空间线程系统,称为。如以下文件所述:

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

这在相当早的时候就被操作系统的线程支持所取代。在Solaris中,这是一个类似于Go的M:N多对多系统,线程库在较少的内核级线程上调度多个程序线程。在使用1:1系统(其中用户线程与内核级线程直接对应)的Linux和更新版本的Solaris等系统上,情况并非如此


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

James Henstridge已经提供了Java绿色线程的良好背景,以及向程序员公开本机操作系统线程所带来的效率问题,因为它们的使用非常昂贵

有几所大学试图从这种情况中恢复过来。其中两个来自肯特和CTJ,尽管可能在特温特已经不存在了。两者都提供了基于Hoare的CSP的Go风格的简单并发设计。但是,由于JVM线程的成本很高,这两种方法的编码性能都很差

如果性能不是关键因素,那么CSP是实现并发设计的一种更好的方法,因为它避免了异步编程的复杂性。您可以在生产代码中使用JCSP—我可以

有报道称,JCSP团队还向JVM添加了一个实验性的JNI插件,以修改线程语义,使其更加高效,但我从未见过这种情况

幸运的是,你可以吃蛋糕了。您可以获得基于CSP的先发制人的简单性,再加上顶级性能。耶


旁白:一篇关于允许在JVM上使用CSP的并发Scala程序的延续传递样式修改的报告。我希望今年8月在牛津举行的CPA2014会议上能有更多关于这方面的消息

James Henstridge已经提供了Java绿色线程的良好背景,以及向程序公开本机OS线程所带来的效率问题 因为他们的使用是昂贵的

有几所大学试图从这种情况中恢复过来。其中两个来自肯特和CTJ,尽管可能在特温特已经不存在了。两者都提供了基于Hoare的CSP的Go风格的简单并发设计。但是,由于JVM线程的成本很高,这两种方法的编码性能都很差

如果性能不是关键因素,那么CSP是实现并发设计的一种更好的方法,因为它避免了异步编程的复杂性。您可以在生产代码中使用JCSP—我可以

有报道称,JCSP团队还向JVM添加了一个实验性的JNI插件,以修改线程语义,使其更加高效,但我从未见过这种情况

幸运的是,你可以吃蛋糕了。您可以获得基于CSP的先发制人的简单性,再加上顶级性能。耶


旁白:一篇关于允许在JVM上使用CSP的并发Scala程序的延续传递样式修改的报告。我希望今年8月在牛津举行的CPA2014会议上能有更多关于这方面的消息

这是不同的,因为在使用Java绿色线程进行编译时,代码仍然可以调用阻塞系统调用,从而阻塞所有绿色线程以进行任何处理。我更多考虑的是一种模型,其中代码看起来像是阻塞的,但实际上并不阻塞。好吧,这基本上就是旧版本Solaris上的M:N线程库所做的:如果一个程序线程进行了阻塞调用,另一个程序线程将被安排在该内核线程上运行。这是不同的,因为在使用Java绿色线程进行编译时,代码仍然可以调用阻塞系统调用,从而阻塞所有绿色线程以进行任何处理。我更倾向于考虑一种模型,其中代码看起来像是阻塞的,但实际上并没有阻塞。好吧,这基本上就是旧版本Solaris上的M:N线程库所做的:如果一个程序线程进行了阻塞调用,那么另一个程序线程将被安排在该内核线程上运行。