为了账号安全,请及时绑定邮箱和手机立即绑定

IO多路复用到底是不是异步的?

IO多路复用到底是不是异步的?

查看完整描述

6 回答

?
千岁不倒翁

TA贡献10条经验 获得超3个赞

异步和同步的区别在API设计,异步API在调用后直接返回,通过回调或者coroutine获得结果。API也是分层的,有框架层的API和系统层的API,多路复用的IO请求在框架层一定是异步的,因为框架层需要累积多个IO请求一起发送给系统调用,那么框架在收到某个IO请求时必然无法同步返回结果,异步设计是必然的。框架在调用系统API的时候一般多路IO的API是同步的,这并不影响框架层的API是异步这个事实。

查看完整回答
反对 回复 2018-04-02
?
linux快速入门培训

TA贡献7条经验 获得超2个赞

同步异步和多路单路是两组正交的概念。不存在“多路复用是否异步”这样的概念问题,只能在某一个特定实现上讨论这一点。一般而言只是异步单路和同步多路实现起来比较困难或者没什么必要罢了,并不是说这样的设计不存在。

然后,同步异步和多路单路在软件上都是管理模式的区别,所以你显然可以实现在同步IO上的异步机制,只要你去进行资源管理就行了。具体方法就得具体问题具体讨论了。

查看完整回答
反对 回复 2018-04-02
?
所谓伊人_在水一方

TA贡献12条经验 获得超8个赞

异步用同步IO实现不就是经典的早期程序员们开一个线程专门用来等一个锁的做法吗(逃,显然这也是异步的啊,只是有巨大的资源浪费而已。异步并不要求你一定要做得比同步好才能叫异步。

IOCP和epoll的区别主要还是事件代表什么意思的区别。IOCP的运作方式是,你要read一个东西,你把buffer准备好,提交上去,IO帮你填好了就告诉你。epoll的运作方式,你要read一个东西,你先提交上去,IO到时候会告诉你你可以read了,然后你再试一下read。这显然都可以算成是异步的,因为你干活的那个函数确实已经返回了,也没有卡在这个IO操作上,后面发生什么事情都是以后的事了。

同步和异步其实不是一个机制的问题,而是你的代码写成什么样子的问题。哪怕系统里只有一个线程,只要你能假装成future/promise,你就变异步了

查看完整回答
反对 回复 2018-04-02
  • 6 回答
  • 1 关注
  • 2254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信