架构筑基面试题系列jvm并发编程netty面试专题_第1页
架构筑基面试题系列jvm并发编程netty面试专题_第2页
架构筑基面试题系列jvm并发编程netty面试专题_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.BIO、NIO AIO I/O 请求时才启动一个线程进行处理。 Stream NIO channel 1.BIO、NIO AIO I/O 请求时才启动一个线程进行处理。 Stream NIO channel 0、基于block 的传输比基于流的传输更高效、更高级的IO zero-copy、IO 多路复用大大Java Reactor 线程模型。 Reactor 中实现读:2.NIO BufferChannelChannel Channel flipclear ition0capacitylimit。 ition 0rewind DirectByteBufferBuffer创建和销毁的成本更高

2、,I/O heapBufferJVM 进行管理。 行交互。通过源码可知,FileChannelread write SelectorChannel,open Selector,register SelectionKeySelectableChannel Selector 关系,wakeup 了新的 channel channel Selector Linux EPollSelectorImplEPollArrayWrapper nativeepoll EPollSelectorImpl. implRegister epoll_ctl epoll 实例中 SelectionKey。 Select

3、orChannel 非常多(百万连接 select Pipesinksource Selector上;select()3.Nettynativeepoll EPollSelectorImpl. implRegister epoll_ctl epoll 实例中 SelectionKey。 SelectorChannel 非常多(百万连接 select Pipesinksource Selector上;select()3.NettyNIOTCP、UDP socketepollcpu占用飙升在NIO NIO 的处理方式。decoder/encoder TCP 粘包/可使用接受/IO线程数、TCP T

4、CP 接收和发送缓冲区使用直接内存代替堆内存,通过内存ByteBufGC ReactorvolitaleCAS4.NettyNetty通过Reactor,s线和worksacceptsocketNioSocketChannel work work readwrite Handler 单线程模型:所有 I/O 或应答/响应消息。一个NIO NIO 线程(Acceptor)TCP 求;NIO线 负责网络 IO 的操作,即消息的 、 、编码和发送;1 NIO 线程可N 1 1 NIO 线程,这是为了防止发生并发操作Acceptor 主从多线程模型:Acceptor Reactor Sub I/O m

5、ainReactor 5.TCP 粘包/TCP粘包/MSSTCPTCP 报文长度-TCP头部长度MSS的时候将发生拆包I/O mainReactor 5.TCP 粘包/TCP粘包/MSSTCPTCP 报文长度-TCP头部长度MSS的时候将发生拆包payload(净荷)MTU(1500 字节)ip 分片。 包尾增加特殊字符分割: 行分隔符类: LineBasedFrameDecoder 或自定义分隔符类 : 序列化(编码)是将对象序列化为二进制形式(字节数组资源占用(异构系统的对接和开发语言切换JavaJSONXML 可替代:跨Web browser Ajax 请求、传输数据量相对小,实时性要求

6、相对低(例如秒级别) json 库。缺点:过于注重快,而偏离了“标准”及功能性、代码质量不高,文档不全。适用场景:协议交互、Web 输出、Android 客户端ThriftRPC 框架。优点:序列化后的体积小, HTTPRPC 解决方案Avro,HadoopJSON于Hadoop gMapReduce ProtobufThriftRPC 框架。优点:序列化后的体积小, HTTPRPC 解决方案Avro,HadoopJSON于Hadoop gMapReduce Protobuf,将数据结构以.proto 文件进行描述,通过代码生成工具可以生成对应数据结构的 POJOProtobuf相关的方法和属

7、性。优点:序列化后码流小,性能高、结构化数据存 容易管理缺点需要依赖于工具生成代码支持的语言相对较Java C+ 的protostuff protobufprotosmarshaling java 类, 无须实java.io.Serializable JMessagepack Hessian remotingonhttp i(Output100msXMLSOAP协议是一WebbrowserAjaxMobileapp与服务端之间的通讯,JSON协议是首选。对于 当对性能和简洁性有极高要求的场景,Protobuf,Thrift,Avro 之间具有一定的竞争关系。T 级别的数据的持久化应用场景,Pr

8、otobuf Avro hadoop子项目里,Avro Hadoop项目,以静态类型语言为主的应用场景,Protobuf Avro 应用场景,AvroRPC解决方案,Thrift是一个好的选择。如果序列化之后需要支持不同的传输层协议,或者需要跨 Protobuf 可以优先考虑。的高性能场景, : RPC解决方案,Thrift是一个好的选择。如果序列化之后需要支持不同的传输层协议,或者需要跨 Protobuf 可以优先考虑。的高性能场景, : ,16,2047 protobuf required字段,optional repeated required编译器为每一个消息类型生成了一个.javaB

9、uilder 类(建消息类接口的) 。 如:=Netty 中的使用:32FrameDecoder 是用于处理半包消息类;类32LengthFieldPrepender 对protobuf 协议的消息头上加上一个长度为的整形字段,用于标志这个消息的长度的类;ProtobufEncoder StringBuilderByteBuf类型:copiedBuffer()8.Netty 一份到直接内存中才写入 Socket ByteBuffer 由 ChannelConfig 分配ChannelConfigByteBufAllocator Direct BufferiteByteBuf 类可以将多个 By

10、teBuf 合并为一个逻辑上的 ByteBuf, Buffer。ponents header body ByteBuf, ByteBuf 在的, iteByteBuf FileRegion FileChannel.tranferTo, 可以直接将文件缓冲区的数据发送到目标 Channelwrite 方式导致的内存拷贝问题。wrap 方法byte 数组、ByteBuf、ByteBufferNetty对象, Selector BUGSelector wakeup CPU 一次计数若在某个周期内连续发生 N 次空对象, Selector BUGSelector wakeup CPU 一次计数若在某个

11、周期内连续发生 N 次空轮询则触发了 epoll 死循环 bug重建 Selector,SocketChannel Selector SelectorSelector 9.Netty是否重来,检测网络延迟,其中idleSeHandler 类 用来检测会话状态 NIO 局部无锁化的串行线程设计相比一个队列-可靠性,链路有效性检测:链路空闲检测机制,读/ByteBuf;ByteBuf Netty 安全性:支持的安全协议:SSL V2 (主从多线程 (AIO(Http流量整型的作用(变压器 NioEventLoopGroup( 其 实 是 MultithreadEventExecutEventExe

12、cutor children , 默认大小是处理器核数 * 2, 这样就一个类型为EventExecutor NioEventLoopGroup newChild children 线程启动时调用SingleThreadEventExecutor的构造方法,执行NioEventLoop类的run 方法,首先会调用hasTasks()方法判断当前taskQueue 是否有元素。如果taskQueue 中有元素,执行 selectNow() 方法,最终执行 selector.selectNow(),该方立即返回。如果 taskQueue没有元素,执行 select(oldWakenUp) 方法se

13、lect ( oldWakenUp) Nio t 线程启动时调用SingleThreadEventExecutor的构造方法,执行NioEventLoop类的run 方法,首先会调用hasTasks()方法判断当前taskQueue 是否有元素。如果taskQueue 中有元素,执行 selectNow() 方法,最终执行 selector.selectNow(),该方立即返回。如果 taskQueue没有元素,执行 select(oldWakenUp) 方法select ( oldWakenUp) Nio t 行 t t 达到阈值(512 rebuildSelectoropenSelecto

14、r selectorold selector selectionKeycanceloldselectorchannel ectedKeys 方法(I/O 任务selectedKeys != null ectedKeysOptimized selectedKeys IO selectkey ectedKey 来处理它,放在数组 selectedKeys 中, 然后为每个事件都调用 ectedKey OP_READ;OP_WRITE;OP_CONNECTrunAllTasks 方法(IO 任务fetchFromScheduledTaskQueuescheduledTaskQueue中已经超过延迟执行时间的任务移到taskQueue中等待被执行,taskQueue 64 个任务,进行耗时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论