什么是事件驱动编程?

6

什么是事件驱动编程,并且事件驱动编程和线程有关吗?我看到这个问题是在阅读有关服务器如何处理用户请求和管理数据的文章时产生的。如果用户发送请求,服务器开始处理数据并将状态写入表格。为什么会这样?服务器停止为该用户处理数据并开始为另一个用户处理数据还是每个用户的处理都在不同的线程中进行(多线程服务器)?


1
真的吗?为什么不直接谷歌搜索问题标题呢?http://en.wikipedia.org/wiki/Event-driven_programming - JonnyReeves
3
它没有给我正确的答案 :( - omegasbk
我不确定你是否有问题。回答你的问题,不是的;事件驱动编程并不是指那个。你可能需要阅读一下“观察者模式”的相关内容。 - JonnyReeves
3
有趣 - 我也在谷歌上搜索了同样的问题,然后来到了这里! - Chap
@Chap 哈哈 :) 我希望它能像帮助我一样帮助你! - omegasbk
实际上,这与线程无关,事件驱动设计中有许多概念,例如:事件传递状态、事件通知、事件溯源、CQRS。Martin Fowler的文章《事件驱动应用的伟大介绍》是一个很好的入门指南: https://martinfowler.com/articles/201701-event-driven.html 此外,你还可以观看他在2017年4月Chicago goto大会上的开幕演讲。 - marcin naglik
1个回答

7

事件驱动编程 != 线程编程,但它们可以(并且应该)重叠。

当系统需要同时处理多个操作时,使用线程编程。我使用“同时”这个词不是很准确,因为大多数操作系统在有多个线程而处理器不足时会采用时间共享模型。无论如何,这与你的问题无关。

当我需要一个应用程序执行两个或多个任务时就会使用线程编程,例如从键盘接收用户输入(线程1)和基于接收到的输入运行计算(线程2)。

事件驱动编程有所不同,但为了扩展,必须利用线程编程。我可以有一个单线程等待事件/中断,然后在事件发生时处理事物。如果真正是单线程,任何额外的事件都将被阻止或丢失,而第一个事件正在被处理。如果我有一个多线程事件处理模型,那么随着事件的出现,额外的线程将被启动。我略过了所需的生成器/工作机制,但仍然与你的问题无关。

为什么服务器在接收事件时开始处理/存储状态信息?因为它被编程为这样做。:-)状态处理可能与事件处理有关,也可能无关。状态处理是与事件处理不同的主题,就像事件与线程不同一样。

那应该回答了你提出的所有问题。Jonny的第一个评论/观点值得注意——更具体地说明你不理解的内容会获得更好的答案。


"在第一个事件被处理时,任何额外的事件都将被阻止或丢失。这是否是 Node.js 的单线程特性所导致的?" - Donato
@Donato - 我对node.js的了解还不够,无法回答这个问题。如果能提供更多细节,这个问题可能足以成为一个很好的SO问题。 - user1345223

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接