系统优化:同步,并行,异步模式

同步模式:  同步模式是最常用,也是最容易理解的模式,目前大多数系统都是采用同步模式来解决实际问题, 比如http协议请求,jdbc请求等等,当发起调用之后,系统线程需要等待返回(或者请求超时)之后,才会执行下一步代码。比如数据库查询,都会一条一条的执行下去。
          优点:简单,易懂,与人的常规思维合拍。
          缺点:浪费性能,在等待返回的时候,线程会阻塞在请求上,此时,系统的压力很小,但是因为线程数量的限制,有阻塞了新的请求进入处理,  系统线程处于饥饿状态。

并行模式:  并行模式是建立在同步模式的基础上,在同步模式中,有部分请求的处理是没有前后关联,处理的顺序是不影响最终结果的, 对于这种处理过程,可以使用并行模式来处理,提升性能。  比如在一个做了分表的用户系统里面,  批量查询用户信息, 此时因为分表的规则问题,无法从数据库里面批量获取用户,只能同步遍历,一个一个的获取用户,此时,就可以使用并行模式, 把获取每一个用户的请求作为一个任务,用其他线程来处理,最后汇总所有线程的处理结果,实现性能优化。

           优点: 提升系统的性能,降低请求延迟。
           缺点: 并行模式是牺牲cpu性能来降低请求延迟, 并且对于被调用方,会增加服务器请求压力,因此使用场景需要开发人员自行判断。 另外,并行模式会人的常规思维存在差异,需要开发人员理解多线程。 最后,并行模式并不适用所有场景,需要开发人员判断使用场景。

异步模式:   前面的两个模式,本质上还是同步模式,但异步模型就完全与同步模式存在差异。它更可以理解为一条流水线处理, 处理的每一个环节由不同的线程执行,直到处理结果产生。比如查询数据库,采用异步模型,发送请求之后,执行线程就会执行完毕,  后续的工作由数据库返回数据的回调来完成, 写js的会很容易理解,一个ajax请求发送到服务端之后, ajax已经执行完成了,如果http请求返回成功,会执行success方法,在等待发挥之前,js是不会阻塞页面。  在后台服务里面,也是可以实现异步模式,但因为java的大部分框架都是给予同步模式开发,因此对于异步模式的运用还算小众, 不过我个人认为这是后面java程序优化的必经之路。 
           优点: 提升系统性能。
           缺点: 代码编写复杂度高,目前的大部分框架代码不支持。


           目前我在rpc框架里面实现了同步,异步模式。
           在rcp框架里面,定义协议的时候,定义了一个seq值,这个数据采用时间戳+自增,保证数据在一定时间内不重复,这是实现同步,异步调用的基础。
            同步模式的请求下,每一次请求,将seq放入到map当中,  发送请求之后,线程监听map。  当服务端经请求返回时,返回数据中包含请求seq,通过seq,到map中查找到请求线程信息,将数据发送到请求线程,请求线程继续执行下面的操作。
            异步模式的请求。 同样在请求是,把seq放入到map,同时将后续需要执行的逻辑放入放入,放入到map当中,发送请求之后,线程退出, 当服务端返回请求时,从map中获取下异步需要执行的逻辑方法,执行此方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值