美文网首页
IO模型一些思考

IO模型一些思考

作者: 康俊1024 | 来源:发表于2019-07-16 11:25 被阅读0次

    为什么说BIO是同步阻塞的?

    • 同步阻塞针对的是磁盘文件读写IO操作来说的,不是针对网络模型而言。
    • 因为用BIO的流读写文件,例如FileInputStream,是说你发起个IO请求直接hang死,卡在那里,必须等着搞完这次IO才能返回。

    为什么说NIO是同步非阻塞的?

    • 因为无论多少客户端都可以接入服务端,客户端接入并不会耗费一个线程,只会创建一个连接然后注册到selector上去,这样你就可以去干其他你想干的其他事情了。
    • 一个selector线程不断的轮训所有的socket连接,发现有事件了就通知你,然后你就启动一个线程处理一个请求即可,这个过程就是非阻塞的。
    • 但是这个处理过程中,你还是要先读取数据,处理,再返回,这是同步的过程。

    为什么说AIO是异步非阻塞的?

    • 通过AIO发起个文件IO操作之后,你立马就返回可以干别的事了,接下来你也不用管,操作系统自己干完了IO之后,告诉你说ok了。
    • 当你基于AIO的api去读写文件时,当你发起一个请求之后,剩下的事情就是交给操作系统了。
    • 当读写完成后,操作系统会回调你的接口,告诉你操作完成
    • 在这期间不需要等待,也不需要去轮训判断操作系统完成的状态,你可以去干其他事情。
    • 同步就是自己主动还得去轮训操作系统,异步就是操作系统反过来通知你。所以说AIO就是异步非阻塞的。

    相关文章

      网友评论

          本文标题:IO模型一些思考

          本文链接:https://www.haomeiwen.com/subject/skrzkctx.html