【Java八股-第二十三期】I/O - 操作系统

提纲:

🔥Linux中的I/O

  • BIO:阻塞式I/O

  • NIO:非阻塞I/O

  • I/O多路复用

  • 异步I/O

  • 信号驱动 I/O
🎈面试八股真题
  • 1、简单讲讲I/O 多路复用

🔥Linux中的I/O

1. BIO:阻塞式I/O

  • 两次阻塞

    • 1、在内核等待数据拷贝至内核缓冲区,例如网络 I/O,数据往往不是立刻到达

    • 2、在数据从内核缓冲区拷贝至用户进程缓冲区时阻塞

2.NIO:非阻塞I/O

  • 当数据还没有拷贝至内核缓冲区时,系统会返回给用户进程一个错误信息,提示进程不要挂起,继续执行

  • NIO 解决了 BIO 第一次阻塞的问题,但进程其实仍然需要等待,用在单个进程的 I/O 上体现不出效果,在 I/O 多路复用中能体现出重要作用

3.I/O多路复用

  • 类似于单 Reactor 模型,单个线程通过 select/epoll 指令,完成多个网络 I/O

  • 原理:单个进程通过 select/epoll 对多个连接进行轮询,有连接数据准备完成,再调用 recvfrom进行读取

  • 若连接数只有一个,I/O 多路复用还不如 BIO,因为调用了两次系统指令,但对于连接数较多情况,BIO 需要多线程处理不同连接数据,I/O 多路复用可以由一个线程来完成,且通常采用 NIO 的方式,即线程是被 select 阻塞,而不是被 I/O 阻塞,在一个 socket 没有准备就绪时,线程可以处理其他已经准备好的 socket

  • # Java 中使用 Selector 实现 I/O 多路复用,ByteBuffer 实现了零拷贝,即通过 mmap 的系统调用方式,将内核内存直接映射到进程的 vma 虚拟内存空间上,从而不需要进行第二次拷贝数据的阻塞

4.异步I/O

  • 即线程发起 I/O 后,可以立刻执行其他操作,由内核去异步进行 I/O,当内核准备就绪后,通过信号通知线程,读取数据,异步 I/O 通常可以采用 Proactor 模型来实现,即一个 Proactor 专门负责接收数据,工作线程只需要负责处理并返回结果,

5.信号驱动 I/O

  • 内核使用 signal 通知线程 I/O 完成

二、面试八股真题🎈🎈

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

代码鹿のJAVA八股面试题总结 文章被收录于专栏

【📫专栏目录在最底部📫】 - 本专栏适合于JAVA已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了JAVA、Spring、计算机网路、操作系统、计算机网络、MySQL、算法与数据结构、中间件等一系列知识点,总结出了高频面试考点(附有答案),事半功倍,为大家春秋招助力。 - 本专栏内容分为五章

全部评论

相关推荐

链接
海梨花:我说话难听,你这简历跟没写没啥区别,搜搜别人的简历,用心写,不要随随便便就结束了
点赞 评论 收藏
分享
12-15 11:27
门头沟学院 Java
哇哇的菜鸡oc:所有人不要理会,就好了,后面他就知道怎么回事了,只能说有的时候市场都是被宰的人搞坏的
点赞 评论 收藏
分享
12-08 07:42
门头沟学院 Java
27届末九,由于是女生,身边人几乎没有就业导向的,自学只能跟着网课,没人指导,很迷茫。下图是我目前的简历,不知道有需要修改的地方吗?求拷打。下面是目前的学习情况:目前算法过完了一遍力扣100和代码随想录,不过不是很熟,面经看了小林coding、JavaGuide,有一些没用过的技术看得不是很明白,掌握得不是很扎实。再加上常年跟黑马网课听思路,真正自己动手写代码的时间很少,这让我一直不敢投简历,总觉得内里空虚。项目没准备好面试相关的问题,简历上相应的考点不熟。如此种种。。。看到很多很多学长学姐大佬们的面经,愈发觉得面试可怕,自己没准备好,总担心自己是不是无望后端开发了。看到牛客很多同届以及更小一届的同学都找到实习了,很希望自己也能找到实习。而自己又好像摸不到后端学习的门路,只能不断赞叹黑马虎哥写的代码真优雅!微服务架构实在巧妙!消息队列、redis、sentinel、nacos、mybatisplus等等的引入都会让我赞叹这些工具的设计者的巧思,以及包括但不限于Java语言的优雅。然而只是停留在了解的程度,并不熟练。我是很希望能够继续深入探索这些知识的,只不过有一大部分时间都花在学校课程上了。我感觉我被困住了,我一方面必须保证我能够有个不错的学业分使我能有我几乎不想选择的读研退路(还有个原因是复习不全我会焦虑考试挂科,因此我会做好全面的准备,而这一步很费时间),一方面在B站学习各种网课,一方面得考虑提升自己并不扎实的算法基础,另一方面还得准备八股面经。这让我有点苦恼,我好像没那么多时间,因为绝大部分时间都花在了复习学校科目中了。我好像处处用时间,但收效甚微。想问问各位大佬是怎么平衡时间的呢?算法、项目和八股是怎么准备的呢?有什么高效的方法吗?谢谢您们花时间阅读我的稿件!
菜菜狗🐶:大胆投,我当时也是害怕面试,投多了发现根本约不到面🤡
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务