您的位置 首页 > 德语词汇

acceptor是什么意思,acceptor的意思翻译、用法、同义词、(彻底搞懂Reactor模型和Proactor模型)

本篇文章给大家谈谈acceptor是什么意思,acceptor的意思翻译、用法、同义词、,以及彻底搞懂Reactor模型和Proactor模型对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

更多内容,欢迎关注微信公众号:全菜工程师小辉~

在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作。

acceptor是什么意思,acceptor的意思翻译、用法、同义词、(彻底搞懂Reactor模型和Proactor模型)

想要了解两种模型,需要了解一些IO、同步异步的基础知识,彻底搞懂Java的网络IO

无论是Reactor模型还是Proactor模型,对于支持多连接的服务器,一般可以总结为2种fd和3种事件,如下图:

无论是C++还是Java编写的网络框架,大多数都是基于Reactor模型进行设计和开发,Reactor模型基于事件驱动,特别适合处理海量的I/O事件。

写入操作类似于读取操作,只不过第一步注册的是写就绪事件。

1.单Reactor单线程模型

Reactor线程负责多路分离套接字,accept新连接,并分派请求到handler。Redis使用单Reactor单进程的模型。

单Reactor单线程模型只是在代码上进行了组件的区分,但是整体操作还是单线程,不能充分利用硬件资源。handler业务处理部分没有异步。

对于一些小容量应用场景,可以使用单Reactor单线程模型。但是对于高负载、大并发的应用场景却不合适,主要原因如下:

为了解决这些问题,演进出单Reactor多线程模型。

2.单Reactor多线程模型

该模型在事件处理器(Handler)部分采用了多线程(线程池)。

相对于第一种模型来说,在处理业务逻辑,也就是获取到IO的读写事件之后,交由线程池来处理,handler收到响应后通过send将响应结果返回给客户端。这样可以降低Reactor的性能开销,从而更专注的做事件分发工作了,提升整个应用的吞吐。

为了解决性能问题,产生了第三种主从Reactor多线程模型。

3.主从Reactor多线程模型

比起第二种模型,它是将Reactor分成两部分:

Nginx、Swoole、Memcached和Netty都是采用这种实现。

异步IO都是操作系统负责将数据读写到应用传递进来的缓冲区供应用程序操作。

Proactor中写入操作和读取操作,只不过感兴趣的事件是写入完成事件。

因此在Linux下实现高并发网络编程都是以Reactor模型为主。

Netty的线程模型

Netty采用的是主从线程模型。下面是Netty使用中很常见的一段代码。

publicstaticvoidmain(String[]args)throwsException{

EventLoopGroupbossGroup=newNioEventLoopGroup(1);

EventLoopGroupworkerGroup=newNioEventLoopGroup();

ServerBootstrapb=newServerBootstrap();

b.group(bossGroup,workerGroup)

.channel(NioServerSocketChannel.class)

.childOption(ChannelOption.TCP_NODELAY,true)

.childAttr(AttributeKey.newInstance("childAttr"),"childAttrValue")

.childHandler(newChannelInitializer<SocketChannel>(){

publicvoidinitChannel(SocketChannelch){

ChannelFuturef=b.bind(8888).sync();

f.channel().closeFuture().sync();

bossGroup.shutdownGracefully();

workerGroup.shutdownGracefully();

如果需要在客户端连接前的请求进行handler处理,则需要配置handler();如果是处理客户端连接之后的handler,则需要配置在childHandler()。option和childOption也是一样的道理。

通过配置boss和worker线程池的线程个数以及是否共享线程池等方式,Netty的线程模型可以在以上三种Reactor模型之间进行切换。

tomcat的线程模型

Tomcat支持四种接收请求的处理方式:BIO、NIO、APR和AIO

Nginx的进程模型

Nginx采用的是多进程(单线程)&多路IO复用模型。

Redis的线程模型

点击查看笔者之前的博客,彻底搞懂Redis的线程模型

Swoole的进程模型

点击查看笔者之前的博客,Swoole引擎原理的快速入门干货

更多内容,欢迎关注微信公众号:全菜工程师小辉~

关于acceptor是什么意思,acceptor的意思翻译、用法、同义词、和彻底搞懂Reactor模型和Proactor模型的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023