• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

nio原理

武飞扬头像
Java超神之路
帮助1

nio关键是selector(多路复用器)

Selector类是NIO的核心类,Selector能够检测多个注册的通道上是否有事件发生,如果有事件发生,便获取事件然后针对每个事件进行相应的响应处理。这样一来,只是用一个单线程就可以管理多个通道,也就是管理多个连接。这样使得只有在连接真正有读写事件发生时,才会调用函数来进行读写,就大大地减少了系统开销,并且不必为每个连接都创建一个线程,不用去维护多个线程,并且避免了多线程之间的上下文切换导致的开销。

与Selector有关的一个关键类是SelectionKey,一个SelectionKey表示一个到达的事件,这2个类构成了服务端处理业务的关键逻辑。
学新通

epoll原理

三个关键函数

epollCreat

创建一个epoll实例,并返回一个非负数作为文件描述符(Linux系统一切皆文件)

学新通

epollCtl

会调用Linux操作系统EPOLL_CTL

学新通调用EPOLL_CTL才会真真监听evnt事件

学新通

epollWait

slector内部有两个集合

  • 就绪事件列表rdlist
  • channel集合
    学新通
    1.注册调register会把socketchannel和serverSocketChannel放到channel集合
    学新通epollWait会监听就绪事件集合,有事件就不会阻塞,集合为空时就会阻塞等着

2.操作系统能通过中断感知客户端连接,收发数据,由操作系统把事件放到就绪事件列表

select,poll和epoll区别

select会遍历所有的socketChannnel
poll和select差不多,只是最大连接数有没有限制
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhhiac
系列文章
更多 icon
同类精品
更多 icon
继续加载