反应器模式,是一种高效的异步IO模式,特征是回调,当IO完成时,回调对应的函数进行处理。容易和观察者模式混淆。
工具/原料
软件版本:vs2018
操作系统:windows10home
操作电脑:台式机
理解反应堆模式
1、什么是反应堆模式:反应堆是一种事件处理的设计模式。异步的收取消息。将不同的消息绑定到不同的回调函数上。
2、反应堆模式应用场景:反应堆模式是为了应对高并发的服务器端开发。redis、netty、ZeroMQ和一些游戏服务器都采用了反应堆模式。
3、反应堆模式的优缺点:缺点:Reactor模式增加了一定的复杂性。Reactor模式需要底层的同步事件多路分配器的支持。Reactor模式在IO读写数据时还是在同一个线程中实现的。优点1.响应快,不必为单个同步时间所阻塞,虽然Reactor本身依然是同步的;2.编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程的切换开销;3.可扩展性,可以方便的通过增加Reactor实例个数来充分利用CPU资源;4.可复用性,reactor框架本身与具体事件处理逻辑无关,具有很高的复用性;
4、反应堆模式内核收到数据会回调。匹配器匹配到不同连接上。数据可能还没有收完。
5、如何优化反应堆模式:reactor模式的(socket)读写还是阻塞的。读写又很慢。proactor就没有这样的问题。这个时候可以用多线程去加速。反应堆放在主线程。工作线程放到另一个线程。或者是来个线程池。socket的时间会进入一个队列。线程池直接的线程会有锁的竞争。为了避免他们之间的竞争可以用开多个队列。根据玩家的id进行散列。这样即可以保证同一个玩家顺序的正确。有避免了线程资源的竞争
6、利用协程或许是更好的解决方案。单线程运行调试比较容易。毕竟游戏的业务逻辑都比较复杂。而且可以使用线程不安全函数。开发的效率得到提高。
7、提到reactor模式就不得不提proactor。Proactor模式是将所有IO事件操作都交由主线程和内核处理,工作线程只负责业务逻辑。可以很明显的发现Proactor相对于reactor更加高效。缺点就是更加复杂。Reactor:同时接收多个服务请求,并且依次同步的处理它们的事件驱动程序;Proactor:异步接收和同时处理多个服务请求的事件驱动程序;