Fork/Join背景与设计理念

本文介绍了Fork/Join框架的应用场景与设计要点,对比线程池,适用于可拆分的大任务并行处理,采用工作窃取算法提高线程利用率。

(1)背景

               简单地说,就是如果说有一组任务的话,我们可以使用线程池,并发执行这些任务就可以提高运行效率了

               但是,现在只有一个任务,而且这个任务可以拆分为一组不相关的子任务,这时就可以使用Fork/Join框架了

               举个例子:

              1.有50个1+2+..+100的任务

                 使用ThreadPool执行这50个任务即可

              2.仅有1个1+2+..+100的任务

                 一般情况下就用一个线程执行就可以了,但是我们为了提高效率,可以将这个任务拆分为1+2,3+4....99+100这50个任务,对这50个任务并发执行,之后再将这50个结果合并就可以提高效率

                 实际上就是算法中的分治

                  

                  再次提醒:Task 0只是一个任务


(2)设计要点

               1.工作窃取算法

                   1)基本思想

                         也就是如果某个线程先执行完了,那么就会从其他任务队列中偷取任务过来帮助执行

                         

                   2)使用工作窃取算法原因

                          <1>假如当前要执行一个比较大的任务,我们通过分治将这个任务分割为一组互不依赖的子任务。

                          <2>为了减少线程间的竞争(如果只使用一个队列,那么各个线程从队列中取任务的时候不可避免的会有竞争),于是将这些子任务分别放到不同的队列中,并为每一个队列创建一个线程来执行这个队列中的任务。这里队列和线程是一一对应的

                          <3>但是有的线程会先执行完自己队列中的任务,而其他线程还有任务没有完成。因为需要等待全部任务完成再将最终结果合并,所以做完任务的线程只能等着

                          <4> 但是干完任务的线程与其等着,还不如去帮其他线程干活,所以它就会从其他线程的队列中窃取一个任务来执行

                          <5>因为在窃取过程中会有2个线程访问同一个任务队列,所以必然会有竞争,这时候可以将任务队列设置成双向队列队列对应的线程按照队列规则从头部拿任务,窃取线程从队尾拿

                   3)缺点

                          <1>当双向队列中只有一个任务的时候,仍然会出现竞争

                          <2>因为创建了多个线程多个队列,因而会消耗更多资源



代码转载自:https://pan.quark.cn/s/7f503284aed9 Hibernate的核心组件总数达到五个,具体包括:Session、SessionFactory、Transaction、Query以及Configuration。 这五个核心组件在各类开发项目中都具有普遍的应用性。 借助这些组件,不仅可以高效地进行持久化对象的读取存储,还能够实现事务管理功能。 接下来将通过图形化的方式,逐一阐述这五个核心组件的具体细节。 依据所提供的文件内容,可以总结出以下几个关键知识点:### 1. SSH框架详细架构图尽管标题提及“SSH框架详细架构图”,但在描述部分并未直接呈现关于SSH的详细内容,而是转向介绍了Hibernate的核心接口。 然而,在此我们可以简要概述SSH框架(涵盖Spring、Struts、Hibernate)的核心理念及其在Java开发中的具体作用。 #### Spring框架- **定义**:Spring框架是一个开源架构,其设计目标在于简化企业级应用的开发流程。 - **特点**: - **分层结构**:该框架允许开发者根据实际需求选择性地采纳部分组件,而非强制使用全部功能。 - **可复用性**:Spring框架支持创建可在不同开发环境中重复利用的业务逻辑和数据访问组件。 - **核心构成**: - **核心容器**:该部分包含了Spring框架的基础功能,其核心在于`BeanFactory`,该组件通过工厂模式运作,并借助控制反转(IoC)理念,将配置和依赖管理具体的应用代码进行有效分离。 - **Spring上下文**:提供一个配置文件,其中整合了诸如JNDI、EJB、邮件服务、国际化支持等企业级服务。 - **Spring AO...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值