问三个问题。mapreduce与fork join区别 2 fork join 与 与多线程操作然后等待主线程统一返回有什么区别
来源:7-3 J.U.C-ForkJoin
Sivel
2018-09-06
问三个问题
1: mapreduce与fork join区别 ?查了一些相关资料但是还是比较懵逼 比较不出优略。或者说各自的优势
2:fork join 与 与多线程操作然后等待主线程统一返回有什么区别
fork join采用分而治之的思想。我举一个例子 比如一个十万的数组求和。我采用十个进程区分别计算处理,然后依次拿到返回值 主线程等待子线程去哪不结束统一返回 跟采用fork join 这两种有什么优略对比呢?
3 Semaphore 与newCachedThreadPool联合使用 与 newFixedThreadPool 的区别
Semaphore 与newCachedThreadPool联合使用的目的是为了防止无限的消耗内存?
但是直接用newFixedThreadPool 或者说直接手动写一个线程池,定义一个有界队列哪怕把队列值写的很大也是可以的啊
1回答
-
你好,分别回答一下你这几个问题
1、map reduce与fork join区别 。他俩最大的区别是,fork join主要是在一个jvm上进行使用的,而map reduce是明确设计为在集群上工作。同时呢,fork join是将任务分割成多个子任务的,以递归的方式,可以有很多层,更充分地利用内核;map reduce 则是做一个大的分裂,单层,分裂之后互相之间没有通信,并可大规模扩展。
2、fork join主要是不断拆分自己的任务,主要是为了完成同一个任务。而主线程等待子线程可以是不同的任务,只是在保证都结束后再继续后面的操作。在计算单一任务时,fork join会更有优势。
3、当我们使用newCachedThreadPool时,通常是确认调用时不会创建特别多的线程,不会无限的消耗内存,如果存在无限消耗内存的可能的话,那么newCachedThreadPool是不适合的。加上Semaphore,确实可以防止无限的消耗内存,但好处不光这一点,还可以控制资源的使用情况,比如需要请求db或第三方资源时,如果同一时间请求数太多,可能会出现问题,使用Semaphore可以保证同一时间请求数不会过多。newCachedThreadPool和newFixedThreadPool本质上都是传入ThreadPoolExecutor时参数差一点,点开方法可直接看传入参数的源码,稍微调整下参数,他们就相同了。JDK为了方便大家使用,默认声明了这几种定义,当然我们实际使用时也可以封装个自己需要的,本质上都是对ThreadPoolExecutor参数的调整。
10
相似问题