Java 什么';这是一种从并行评估切换到顺序评估的干净方法吗?
在分治算法中,如果需要,将分割的问题片段发送到单独的线程是有意义的Java 什么';这是一种从并行评估切换到顺序评估的干净方法吗?,java,multithreading,parallel-processing,Java,Multithreading,Parallel Processing,在分治算法中,如果需要,将分割的问题片段发送到单独的线程是有意义的 每一块都足够大,而且 还没有太多线程在运行 简单示例:在merge-sort中,给定50000000个元素列表,将前半部分发送到一个线程,将第二部分发送到另一个线程,以此类推几次是有意义的,但在某个点上(我可以想象,在一台典型的PC上最多进行四次拆分之后),线程开销超过了任何收益。编写代码以从拆分线程过渡到不拆分线程的最佳方法是什么?“将前半部分发送到一个线程,将第二部分发送到另一个线程是有意义的”-不,因为每个线程的确切时间可
因此,工作件数!=线程数。这意味着应该使用线程池。将工作拆分为多个部分与选择线程池的大小无关。工件越大,切换越少,但平衡性越差。根据经验,应该有>100个片段,每个片段的执行时间为1到1000毫秒。线程池的侧面是可用处理器的数量,乘以works进行I/O时的某个因素。您面临的问题可以通过使用Java的Fork/Join框架来解决。ForkJoinPool不会产生很多线程,而是在一些线程等待时重用它们。FJP的创建正是为了解决设备和征服问题