广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    设计模式:反应堆模式(reactor)

    来源:网络收集  点击:  时间:2024-03-07
    【导读】:
    反应器模式,是一种高效的异步IO模式,特征是回调,当IO完成时,回调对应的函数进行处理。容易和观察者模式混淆。工具/原料more软件版本:vs 2018操作系统:windows 10 home操作电脑:台式机理解反应堆模式1/7分步阅读

    什么是反应堆模式:

    反应堆是一种事件处理的设计模式。异步的收取消息。将不同的消息绑定到不同的回调函数上。

    2/7

    反应堆模式应用场景:

    反应堆模式是为了应对高并发的服务器端开发。redis、netty、ZeroMQ和一些游戏服务器都采用了反应堆模式。

    3/7

    反应堆模式的优缺点:

    缺点:

    Reactor模式增加了一定的复杂性。

    Reactor模式需要底层的同步事件多路分配器的支持。

    Reactor模式在IO读写数据时还是在同一个线程中实现的。

    优点

    1. 响应快,不必为单个同步时间所阻塞,虽然Reactor本身依然是同步的;

    2. 编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免 了多线程的切换开销;

    3. 可扩展性,可以方便的通过增加Reactor实例个数来充分利用CPU资源;

    4. 可复用性,reactor框架本身与具体事件处理逻辑无关,具有很高的复用 性;

    4/7

    反应堆模式 内核收到数据会回调。匹配器匹配到不同连接上。数据可能还没有收完。

    5/7

    如何优化反应堆模式:

    reactor模式的(socket)读写还是阻塞的。读写又很慢。proactor就没有这样的问题。这个时候可以用多线程去加速。反应堆放在主线程。工作线程放到另一个线程。或者是来个线程池。socket的时间会进入一个队列。线程池直接的线程会有锁的竞争。为了避免他们之间的竞争可以用开多个队列。根据玩家的id进行散列。这样即可以保证同一个玩家顺序的正确。有避免了线程资源的竞争

    6/7

    利用协程或许是更好的解决方案。单线程运行调试比较容易。毕竟游戏的业务逻辑都比较复杂。而且可以使用线程不安全函数。开发的效率得到提高。

    7/7

    提到reactor模式就不得不提proactor。

    Proactor模式是将所有IO事件操作都交由主线程和内核处理,工作线程只负责业务逻辑。

    可以很明显的发现Proactor相对于reactor更加高效。缺点就是更加复杂。

    Reactor:同时接收多个服务请求,并且依次同步的处理它们的事件驱动程序;Proactor:异步接收和同时处理多个服务请求的事件驱动程序;

    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_278115.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 20:22:28  耗时:0.027
    0.0266s