ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【架构师面试-Java编程基本功-5】-五种IO模型

2021-11-28 10:02:20  阅读:161  来源: 互联网

标签:Java 钓鱼 鱼竿 阻塞 描述符 上钩 IO 架构师


注意:我这里的用户空间就是应用程序空间

1:阻塞 BIO(blocking I/O)

A 拿着一支鱼竿在河边钓鱼,并且一直在鱼竿前等,在等的时候不做其他的事情,十分专心。只有鱼上钩的时,才结束掉等的动作,把鱼钓上来。

在内核将数据准备好之前,系统调用会一直等待所有的套接字,默认的是阻塞方式。

 2:非阻塞 NIO(noblocking I/O)

B 也在河边钓鱼,但是 B 不想将自己的所有时间都花费在钓鱼上,在等鱼上钩这个时间段中,B 也在做其他的事情(一会看看书,一会读读报纸,一会又去看其他人的钓鱼等),但 B 在做这些事情的时候,每隔一个固定的时间检查鱼是否上钩。一旦检查到有鱼上钩,就停下手中的事情,把鱼钓上来。 B 在检查鱼竿是否有鱼,是一个轮询的过程。

3:异步 AIO(asynchronous I/O)

C 也想钓鱼,但 C 有事情,于是他雇来了 D、E、F,让他们帮他等待鱼上钩,一旦有鱼上钩,就打电话给 C,C 就会将鱼钓上去。

当应用程序请求数据时,内核一方面去取数据报内容返回,另一方面将程序控制权还给应用进程,应用进程继续处理其他事情,是一种非阻塞的状态。

4:信号驱动 IO(signal blocking I/O)

G 也在河边钓鱼,但与 A、B、C 不同的是,G 比较聪明,他给鱼竿上挂一个铃铛,当有鱼上钩的时候,这个铃铛就会被碰响,G 就会将鱼钓上来。

信号驱动 IO 模型,应用进程告诉内核:当数据报准备好的时候,给我发送一个信号,对 SIGIO 信号进行捕捉,并且调用我的信号处理函数来获取数据报。

5:IO 多路转接(I/O multiplexing)

H 同样也在河边钓鱼,但是 H 生活水平比较好,H 拿了很多的鱼竿,一次性有很多鱼竿在等,H 不断的查看每个鱼竿是否有鱼上钩。增加了效率,减少了等待的时间。

IO 多路转接是多了一个 select 函数,select 函数有一个参数是文件描述符集合,对这些文件描述符进行循环监听,当某个文件描述符就绪时,就对这个文件描述符进行处理。

IO 多路转接是属于阻塞 IO,但可以对多个文件描述符进行阻塞监听,所以效率较阻塞 IO 的高。 

如果您觉得文章好看,欢迎点赞,感谢!!☺☻

标签:Java,钓鱼,鱼竿,阻塞,描述符,上钩,IO,架构师
来源: https://blog.csdn.net/chongfa2008/article/details/121581009

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有