事件驱动和asynchronous之间有什么区别? 在epoll和AIO之间?

事件驱动asynchronous通常被用作同义词。 两者有什么分别吗?

另外, epollaio什么区别? 他们如何融合在一起?

最后,我读过很多次,Linux下的AIO是可怕的。 究竟是如何破碎?

谢谢。

Solutions Collecting From Web of "事件驱动和asynchronous之间有什么区别? 在epoll和AIO之间?"

事件是实现异步执行的范例之一。 但并非所有异步系统都使用事件。 这是关于这两者的语义的 – 一个是另一个的超实体。

epoll和aio使用不同的隐喻:

epoll是一个阻塞操作( epoll_wait() ) – 你阻塞线程,直到某个事件发生,然后你将事件分派到你的代码中的不同程序/函数/分支。

在AIO中,您将回调函数(完成例程)的地址传递给系统,系统会在发生某些事情时调用您的函数。

AIO的问题是您的回调函数代码从系统线程顶端的系统线程运行。 几个问题,你可以想象。

他们是完全不同的东西。

事件驱动范式意味着一旦发生事件,就会将一个名为“事件”的对象发送给程序,而没有必要定期轮询“某事”来发现事件是否发生。 该“事件”可能被程序困住以执行某些动作(即“处理程序”) – 同步或异步。

因此,处理事件可以是同步的也可以是异步的。 例如,JavaScript使用同步事件系统。

异步意味着动作可以独立于当前的“主”执行流而发生。 请注意,这并不意味着“平行”或“不同线索”。 一个“异步”动作可能实际上在主线程上运行,同时阻塞“主”执行流。 所以不要混淆“异步”和“多线程”。

你可以这么说,从技术上讲,异步操作会自动假定事件 – 至少“完成”,“故障”或“中断/取消”事件(一个或多个)被发送到操作的发起者(或底层操作系统本身)表示操作已经停止。 因此,异步总是事件驱动的,而不是相反的。

事件驱动是针对特定场景注册事件的单个线程。 当这种情况出现时,事件就会被解雇。 然而,即使在那个时候,每个事件都是按顺序发射的。 关于它没有任何异步。 Node.js(网络服务器)使用事件来处理多个请求。

异步基本上是多任务处理。 它可以产生多个线程或进程来执行某个功能。 与事件驱动完全不同的是,每个线程都是独立的,并且几乎不以简单的响应方式与主线程交互。 Apache(网络服务器)使用多个线程来处理传入的请求。