自学内容网 自学内容网

面试题 - parallelStream() 有什么缺点 - ForkJoinPool,它和传统的线程池(如 ThreadPoolExecutor)的区别

  1. 底层使用 ForkJoinPool ,不同与线程池
  2. 适用于连续的内存分布的数据结构,如数组和ArrayList(),并不适用于链表
  3. 适用于 cpu 密集的工作,cpu 的核数多效率高,并行流能否真正提高性能,很大程度上取决于系统的可用CPU 核心数。;不适用于 IO密集型
  4. 线程安全有调试困难程度

ForkJoinPool,它和传统的线程池(如 ThreadPoolExecutor)的区别

  1. ForkJoinPool 适用于分治任务,即适用于任务被分成小块执行,执行完后将结果合并,如并行处理大型数据集、并行递归算法等。使用“工作窃取算法(work-stealing algorithm)”。这种算法允许空闲的线程从其他繁忙线程的队列中“窃取”任务。
  2. 线程池:适用于一般的并发场景,比如处理独立的任务队列、异步任务执行、IO密集型操作等。这些任务往往是互相独立的,并不需要分解和合并。任务通常是独立的、一次性提交
  3. ForkJoinPool.commonPool()parallelStream() 默认使用的是全局的公共 ForkJoinPool,所有调用 parallelStream() 的线程默认会共享这个线程池。也叫做 ForkJoinPool.commonPool()。这个池的大小通常等于可用的 CPU 核心数。
  4. 线程池:线程池(如 ThreadPoolExecutor)通常需要你自己定义和配置,比如核心线程数、最大线程数、队列容量等,且每个线程池是独立的,可以根据场景灵活调整

原文地址:https://blog.csdn.net/weixin_73512213/article/details/142423975

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!