“什么是 IO 的多路复用机制?”
这是一道年薪 50W 的面试题,很遗憾,99% 的人都答复不进去。
大家好,我是 Mic,一个工作了 14 年的 Java 程序员。
明天,给大家分享一道网络 IO 的面试题。
这道题目的文字答复曾经整顿到了 15W 字的面试文档外面,大家能够 S 我支付。
上面看看高手的答复。
高手:
IO 多路复用机制,核心思想是让单个线程去监督多个连贯,一旦某个连贯就绪,也就是触发了读 / 写事件。
就告诉应用程序,去获取这个就绪的连贯进行读写操作。
也就是在应用程序外面能够应用单个线程同时解决多个客户端连贯,在对系统资源耗费较少的状况下晋升服务端的链接解决数量。
在 IO 多路复用机制的实现原理中,客户端申请到服务端后,此时客户端在传输数据过程中,为了防止 Server 端在 read 客户端数据过程中阻塞,服务端会把该申请注册到 Selector 复路器上,服务端此时不须要期待,只须要启动一个线程,通过 selector.select()阻塞轮询复路器上就绪的 channel 即可,也就是说,如果某个客户端连贯数据传输实现,那么 select()办法会返回就绪的 channel,而后执行相干的解决就能够了。
常见的 IO 多路复用机制的实现形式有:select、poll、epoll。
这些都是 Linux 零碎提供的 IO 复用机制的实现,其中 select 和 poll 是基于轮询的形式去获取就绪连贯。
而 epoll 是基于事件驱动的形式获取就绪连贯。从性能的角度来看,基于事件驱动的形式要优于轮询的形式。
总结
IO 多路复用机制,是十分重要的网络通信根底。
在平时的业务开发中,应用比拟少,然而在中间件外面作为根底通信模型,是每个高级工程师必须要把握的内容。
大家记得点赞、珍藏加关注。
版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自
Mic 带你学架构
!
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!