高效并发模式,半同步半异步和领导者追随者

首先来看同步与异步到底是什么呢?

  1. 在计算机领域,同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

  2. 而我们平时经常讨论的同步问题多发生在多线程环境中的数据共享问题。即当多个线程需要访问同一个资源时,它们需要以某种顺序来确保该资源在某一特定时刻只能被一个线程所访问,如果使用异步,程序的运行结果将不可预料。因此,在这种情况下,就必须对数据进行同步,即限制只能有一个进程访问资源,其他线程必须等待

     同步和异步的概念对于很多人来说是一个模糊的概念,是一种似乎只能意会不能言传的东西。其实我们的生活中存在着很多同步异步的例子。比如:你叫我去吃饭,我听到了就立刻和你去吃饭,如果我没有听到,你就会一直叫我,直到我听见和你一起去吃饭,这个过程叫同步;异步过程指你叫我去吃饭,然后你就去吃饭了,而不管我是否和你一起去吃饭。而我得到消息后可能立即就走,也可能过段时间再走。

 

高效模式::

       在每个工作线程中利用epoll lO复用技术,可以同时监听多个事件,异步主线程负责监听链接事件,当事件到来后,传入到工作线程,工作线程将该socket注册到自己的epoll内核注册表中,这样,这样每个工作线程都能处理多个客户连接了

 

半同步/半异步:

        启动一个IO线程,充当主线程,用来监听IO事件或者链接请求,当有链接请求到来或者IO事件到来时,主线程(异步线程负责将该就绪socket放入到请求队列中,根据算法或者事件来选择一个工作线程来处理该socket事件。半同步半异步方式广泛应用于server端编程。比如taobao开源的tbnet(tair,tfs都使用该库)。主要原因是nginx的全异步方式编敲代码难度高,开发效率低,而一个连接一个线程方案无法支持大量的并发连接。半同步半异步方式则是开发效率与高性能之间的一个权衡。网络处理等有框架进行处理。开发人员仅仅关注业务逻辑的编写,仅仅需同步处理请求就可以,对于须要訪问mysql等的应用很方便。

                                                             高效的半同步半异步模式

半同步半反应堆:
其中和半同步和半异步的唯一区别就是,工作线程的选择,半同步半异步是根据算法和时间来选择由那个工作线程负责处理到达请求队列的socket事件,而半同步半反应堆则是由许多工作线程共同来竞争,胜者负责处理该socket事件。

                                                                高效的半同步/半反应堆模式

半同步/半反应堆模式因为也是主线程和工作线程共享任务队列,所以也会存在与半同步/半异步模式一样的问题,就是每次对队列进行操作,都需要进行加锁,从而消耗cpu的时间。而且一个线程同一时间只能处理一个客户请求,如果队列中积累了很多任务,增加工作线程的话,工作线程的切换也会耗费大量cpu时间。

 

领导者追随者模式:


     若干个线程组成线程池,其中一个线程作为领导者用于监听IO事件,其他线程睡眠,当有IO事件到来是,当前领导者从线程池中唤醒一个线程,作为新的领导者,继续监听新的IO时间到来,而原来的领导者,转而去处理自己监听到的IO事件,当处理完毕后,加入到追随者中,等待再次被选中成为领导者。
领导者/追随者模式最大的优点在于,它是自己监听I/O事件并处理客户请求,也就是说从接收到处理都是在同一线程中完成,所以不需要在线程之间传递任何额外的数据,也不用在线程间同步对请求队列的访问。但是它也有明显的缺点,就是只支持一种事件源集合,所以导致它不能像上述那样让每个线程独立的管理多个客户连接。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值