Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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

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 fork-join框架_Java_Multithreading_Fork Join - Fatal编程技术网

在单处理器上使用Java fork-join框架

在单处理器上使用Java fork-join框架,java,multithreading,fork-join,Java,Multithreading,Fork Join,我已经开始使用fj JAVA框架。 据我所知,它只是将像算法计算这样的大任务划分为 小螺纹。 问题是在单处理器机器上使用此框架是否值得。 感谢如果有大量IO操作,多线程在单核处理器上仍然很有用。否则甚至会造成伤害。如果有大量IO操作,多线程在单核处理器上仍然很有用。否则它甚至会受伤。不 单处理器(单核处理器)不能使用多个线程,因为它一次只能运行一个线程。事实上,线程管理的开销会使计算速度降低一点 相关:您可以在运行时获取应用程序可用的处理器数量。请参阅。否 单处理器(单核处理器)不能使用多个线程

我已经开始使用fj JAVA框架。
据我所知,它只是将像算法计算这样的大任务划分为 小螺纹。
问题是在单处理器机器上使用此框架是否值得。

感谢

如果有大量IO操作,多线程在单核处理器上仍然很有用。否则甚至会造成伤害。

如果有大量IO操作,多线程在单核处理器上仍然很有用。否则它甚至会受伤。

单处理器(单核处理器)不能使用多个线程,因为它一次只能运行一个线程。事实上,线程管理的开销会使计算速度降低一点

相关:您可以在运行时获取应用程序可用的处理器数量。请参阅。

单处理器(单核处理器)不能使用多个线程,因为它一次只能运行一个线程。事实上,线程管理的开销会使计算速度降低一点


相关:您可以在运行时获取应用程序可用的处理器数量。请参阅。

通常在运行时使用处理器的数量来确定执行的配置

即使您有一台单核机器,您也可以一次执行多个线程,因此您可以使用f.e.fork join来利用这一点。 如果您的cpu上确实只有一个执行线程,那么与普通执行相比,使用多线程框架的开销较小

另一方面:如果您在单核机器上编写应用程序,并且没有从中获利,那么您以后可能可以使用其他机器,或者将应用程序提供给具有多核/线程机器的用户。无需再次构建应用程序或更改任何内容,即可利用这些功能


因此,这实际上取决于您现在和将来希望使用应用程序的方式。

通常在运行时使用处理器的数量来确定执行的配置

即使您有一台单核机器,您也可以一次执行多个线程,因此您可以使用f.e.fork join来利用这一点。 如果您的cpu上确实只有一个执行线程,那么与普通执行相比,使用多线程框架的开销较小

另一方面:如果您在单核机器上编写应用程序,并且没有从中获利,那么您以后可能可以使用其他机器,或者将应用程序提供给具有多核/线程机器的用户。无需再次构建应用程序或更改任何内容,即可利用这些功能


因此,这实际上取决于您现在和将来使用应用程序的方式。

每个处理器都有一个线程调度程序,它可以将时间分配给一个线程来执行其工作。因此,如果您有100个线程和一个处理器,调度程序将在这100个线程之间切换。然而,尽管如此,在一个处理器上使用多个线程并没有任何优势,因为正如我所描述的,调度程序实际上只是在线程之间快速切换。另外,从CPU的角度来看,上下文切换相当慢。

每个处理器都有一个线程调度程序,它可以将时间分配给一个单独的线程来完成其工作。因此,如果您有100个线程和一个处理器,调度程序将在这100个线程之间切换。然而,尽管如此,在一个处理器上使用多个线程并没有任何优势,因为正如我所描述的,调度程序实际上只是在线程之间快速切换。另外,从CPU的角度来看,上下文切换相当慢。

如oracle文档中所述:

fork/join框架是ExecutorService接口的实现,它帮助您利用多个处理器。它是为可以递归地分解成更小的片段的工作而设计的。目标是使用所有可用的处理能力来提高应用程序的性能


因此,它的主要目标是多处理器体系结构。

如oracle文档中所述:

fork/join框架是ExecutorService接口的实现,它帮助您利用多个处理器。它是为可以递归地分解成更小的片段的工作而设计的。目标是使用所有可用的处理能力来提高应用程序的性能


所以它的主要目标是多处理器架构。

我理解多线程的优点,但问题是,如果任务包含大量IO操作,用于将大任务划分为小子任务的FJ是否能很好地发挥作用,我的答案是相关的。但是使用FJ是值得的还是最好创建一个单独的线程来执行IO?我理解多线程的优点,但问题是,如果任务包含大量IO操作,用于将大任务划分为小子任务的FJ是否能很好地发挥作用,我的答案是相关的。但是使用FJ是值得的,还是最好创建一个单独的线程来执行IO?当第一个线程由于任何原因进入睡眠状态时,第二个线程就可以开始执行了。在单核CPU上进行多线程处理可能有一个优势。我不认为我在遵循你的想法。是的,你说的是真的。然而,我无法举例说明这有助于将单个任务拆分为多个线程。@Slanec当一个线程必须等待IO操作完成时,就会发生这种情况;就像等待从磁盘读取数据一样。多线程是否有助于单个内核取决于