欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于selector的源码分析和理解、思想和应用实践

程序员文章站 2022-04-29 18:54:14
来自京东架构师(JAVA)欢迎关注我的微信公众号java2arch,更多技术文章可看。 一个连接请求connetion request过来,产生一个通道channel(包含并封装了connection),channel注册到selector的set集合环上,服务端主线程死循环while(true)获 ......

来自京东架构师(java)欢迎关注我的微信公众号java2arch,更多技术文章可看。

一个连接请求connetion request过来,产生一个通道channel(包含并封装了connection),channel注册到selector的set集合环上,服务端主线程死循环while(true)获取channel(有事件的,如枚举可读、可写、连接、连接就绪),根据事件枚举switch分支判断,通过获取的channel读请求数据、写响应数据、发送心跳回应、记录日志等等。

 

客户端与服务端建立连接获得单个channel,可以读写数据。

基于selector的源码分析和理解、思想和应用实践

 

精华思想:面对高并发的客户端连接和数据传输,服务端主线程不需要阻塞等待建立连接、读写数据等,通过注册通道事件驱动异步处理高并发的读写等操作。请求来了,先放到环形集合里,有读写数据了,告诉我我再来处理,在这之前,我可以干别的事情或休息,不是站着在门口干等。在进一步,主线程就是老板,来活了告诉老板,老板来了,可以分配给其他小厮做,这样效率和吞吐量就比老板一个人干要强多了吧。boss->woker模型,worker可以是线程池驱动的。netty.使用了事件驱动、异步、多线程高并发的技术和思想。另外呢,考虑引进aio和零拷贝以及channe责任链式的处理handle和filter\chain机制,引入高效序列化、网络心跳保持防火墙开放技术、解决分包、粘包、丢包、以及安全的策略和机制。