通天战队|「015期」JavaSE面试题(十五):网络IO流( 四 )
Q:
什么是零拷贝技术?
linux提供了sendfile , 也就是零拷贝技术
这个零拷贝技术 , 就是先从用户态切换到内核态 , 在内核态的状态下 , 把磁盘上的数据拷贝到内核缓冲区 , 同时从内核缓冲区拷贝一些 offset和length到Socket缓冲区;接着从内核态切换到用户态 , 从内核缓冲区直接把数据拷贝到网络协议引擎里去
同时从Socket缓冲区里拷贝一些offset和length到网络协议引擎里去 , 但是这个offset和length的量很少 , 几乎可以忽略
只要2次切换 , 2次拷贝
Q:
说一下select , poll , epoll的区别?
select , poll实现需要自己不断轮询所有fd集合 , 直到设备就绪 , 期间可能要睡眠和唤醒多次交替 。
epoll也需要调用epoll_wait不断轮询就绪链表 , 期间也可能多次睡眠和唤醒交替 , 但是它是设备就绪时 , 调用回调函数 , 把就绪fd放入就绪链表中 , 并唤醒在epoll_wait中进入睡眠的进程 。 虽然都要睡眠和交替 , 但是select和poll在“醒着”的时候要遍历整个fd集合 , 而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了 , 这节省了大量的CPU时间 。 这就是回调机制带来的性能提升 。
select , poll每次调用都要把fd集合从用户态往内核态拷贝一次 , 并且要把current往设备等待队列中挂一次 , 而epoll只要一次拷贝 , 而且把current往等待队列上挂也只挂一次(在epoll_wait的开始 , 注意这里的等待队列并不是设备等待队列 , 只是一个epoll内部定义的等待队列) 。 这也能节省不少的开销 。
祝大家都能拿到心仪的offer!
等风也等你
文章都看完了
不点个
吗
推荐阅读
- 大河客户端|布局战队,导师各有妙招,《2020中国好声音》收视率蝉联第一
- 周到|“好声音”蝉联省级卫视综艺节目收视第一,首迎抢位战导师布局战队各有妙招
- 通天战队|A股最励志闻泰科技!给华为小米打工到半导体巨头,半年赚17亿
- |《街舞3》火舞台battle开启 钟汉良战队团魂之力势不可挡
- |《这!就是街舞》第三季火舞台热力喷发,队长领衔齐舞大秀燃炸战队之魂
- 巅峰战队|ConcurrentHashMap的部分源码分析
- 巅峰战队|VERTIX户外手表,勇攀新高峰——COROS
- 环球网|美海军陆战队一架CH-53E紧急迫降 未造成人员伤亡
- tes战队|lpl战队成员大更新!RNG崛起!TES在明年无可撼动!
- 碰碰战队|麒麟5nm芯片推迟,消息称华为正力催台积电交付订单
