Con*_*ion 40 linux asynchronous epoll aio event-driven
事件驱动和异步通常用作同义词.这两者有什么不同吗?
另外,epoll和之间有什么区别aio?它们如何结合在一起?
最后,我多次读过Linux中的AIO被严重破坏.究竟是怎么破碎的?
谢谢.
c-s*_*ile 22
事件是实现异步执行的范例之一.但并非所有异步系统都使用事件.这是关于这两者的语义 - 一个是另一个的超实体.
epoll和aio使用不同的比喻:
epoll是一个阻塞操作(epoll_wait()) - 你阻塞线程直到某个事件发生,然后你将事件分派给代码中的不同过程/函数/分支.
在AIO中,您将回调函数(完成例程)的地址传递给系统,系统会在发生事件时调用您的函数.
AIO的问题是你的回调函数代码是从系统线程运行的,所以在系统堆栈的顶部.你可以想象的一些问题.
Ste*_*ung 20
它们是完全不同的东西.
事件驱动的范例意味着,只要发生某些事情,就会向程序发送一个称为"事件"的对象,而不必定期轮询该"事物"以发现它是否已经发生.该"事件"可能被程序捕获以执行某些操作(即"处理程序") - 同步或异步.
因此,事件的处理可以是同步的也可以是异步的.例如,JavaScript使用同步事件系统.
异步意味着操作可以独立于当前的"主"执行流而发生.你要知道,它确实不是意味着"平行"或"不同的线程"."异步"动作实际上可以在主线程上运行,同时阻止"主"执行流.所以不要混淆"异步"和"多线程".
您可以说,从技术上讲,异步操作会自动假定事件 - 至少"已完成","出现故障"或"已中止/已取消"事件(其中一个或多个)被发送给操作的发起人(或者潜在的O/S本身)表示操作已经停止.因此,异步始终是事件驱动的,但不是相反的.