问题标签 [event-driven]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 我应该为这个 CPU 模拟应用程序使用 Java“工作线程”吗?
我正在用 Java/Swing 编写一台旧计算机的模拟器,我想我已经确定了我遇到的设计问题。尽管这个应用程序很奇特,但我怀疑有人会找到解决这个问题的“模式”。
我应该补充一点,我仍然是 OOP、GUI 和设计模式的初学者。
该机器有一个 GUI 线程 (Console) - 带有按钮和开关,以及一个模型线程 (CPU),控制台与模型线程 (CPU) 通信以使控制台事件改变 CPU 的状态。当然,控制台是来自 AWT 事件队列的事件驱动。控制台通过在 CPU 接收的优先阻塞队列上排队消息来与 CPU 通信。因此,CPU 也被构造为事件循环。到现在为止还挺好。
问题是,当您在控制台上按下 START 时,您希望 CPU 开始执行其内存中的任何程序。它仍然需要响应来自控制台的开关抛出和按钮推动(例如 STOP),但它主要需要坐在那里并通过其指令获取-解码-执行循环进行旋转。
甚至这在一段时间内也没有问题:我有一个名为Cycle()的方法,它将执行当前指令的一个特定“周期”,然后返回,立即重新调度以执行下一个周期。我将 Cycle() 的调用放在 CPU 的运行循环中,并在每个循环后轮询消息队列。如果 CPU 停止,运行循环将简单地等待消息队列。
现在:我正在执行 I/O 指令,例如读卡。其中一个周期有必要向相关外围设备发送数据请求(其本身实现为在单独线程上运行的 GUI/模型),然后等待数据到达。这完全打破了 CPU 是一个简单的事件循环的概念,它接收消息并对其进行操作,而不会导致进程阻塞。这个新的循环将阻塞。如果操作员没有将卡片组加载到读卡器中,它可能会阻塞很长时间。
我曾考虑将指令 fetch-decode-execute 循环分解为一个单独的“工作”线程,但我认为这不太合适,因为工作线程(据我所知)旨在异步运行以完成,并且运行时不要继续与其父线程交互。(事实上,我想不出为什么“工作线程”应该终止。)此外,当一个循环需要访问由于控制台按键而可以同时修改的数据时,目前不需要同步。
那么,我如何设法将“事件驱动”处理与需要在继续之前显式等待消息的传统批处理相结合呢?
ruby-on-rails - Rails:如何在事件触发之前没有响应
我不知道 Rails 是否有以下方法:
- 接收请求
- 将请求放入监控列表,直到有事件触发
- 完成请求但不向客户端返回任何响应(没有 HTTP 响应),触发器将在处理后做响应。
我找到了一些关于delayed_job 的信息,但它立即返回响应并将作业置于似乎不是事件驱动的后台。
任何人都可以帮忙吗?
安迪。
rest - Javaspaces、Rest 和事件驱动架构
我想更多地了解 Javaspaces、REST 和事件驱动架构的融合。请问我在哪里可以找到有关所有技术的信息?
谢谢^_^
events - 在发布-订阅系统中处理事件的不同方式是什么?
在每个订阅者等待多种类型事件的发布-订阅系统中,有没有比简单切换更好的处理解决方案?
假设我们有 2 个发布者,Pub1 和 Pub2;Pub1 发送 2 种事件 Pub1-eventA 和 Pub1-eventB,Pub2 相同,分别为 Pub2-eventA 和 Pub2-eventB
另一方面,我们有一个订阅 Pub1 和 Pub2 事件的客户端 Sub1;
您将如何管理在 Sub1 侦听器中处理这些事件?
这里有一些可能性:
一个听众,一个大开关(难以维护):
一个监听器和一个关联图:
每个事件类型一个监听器:
android - Android smoothScrollTo 不调用 onScrollStateChanged
我正在使用smoothScrollBy()
滚动到ListView
. 我希望在完成滚动以将其与用户用手指滚动时触发ListView
的当前事件集成时收到通知。onScrollStateChanged()
目前,我正在使用Timer
在平滑滚动持续时间后 100 毫秒运行的 a,但这不像我希望的那样由事件驱动。
expression-blend - Expression Blend VSM 与事件驱动
我最近使用了 Expression Blend,发现它有一个叫做 Visual State Manager 的东西,它和常规的事件驱动模型有什么区别,哪个更好?
c++ - 这会导致事件驱动编程中的竞争条件吗?
我正在离散模拟器中编写一个基于代理的小型交互模拟,并开始编写一些如下所示的代码。我之前没有一些事件驱动的编程,但并没有真正观察到这种情况。我想知道以下代码是否会在更新msgRcvd
.
我的理解是,currentTime() + 5
两个代理同时收到消息,因为这两个事件都在同一逻辑时间发生,所以我应该看到消息数为 2?或者我会看到一些奇怪的竞争条件发生并且值取决于调度程序(即它最终可能打印 1 或 2)?有什么建议么?
javascript - 浏览器端 node.js 还是非阻塞 javascript?
我对非阻塞架构很着迷。虽然我没有使用过 Node.js,但我在概念上已经掌握了它。此外,我一直在开发一个事件驱动的 Web 应用程序,因此我对事件编程有基本的了解。
您如何在浏览器中编写非阻塞 javascript?我想这在某些方面一定与 Node 的做法不同。例如,我的应用程序允许用户加载大量数据(序列化为 JSON)。解析此数据以重构应用程序状态。这是一项繁重的操作,可能会导致浏览器锁定一段时间。
我相信使用网络工作者是一种方式。(这似乎是显而易见的选择,然而,Node 实现了一个非阻塞的、事件驱动的架构,我相信不使用 Web Workers,所以我想肯定有另一种方式。)我相信计时器也可以发挥作用。我阅读了 TameJS 和其他一些扩展 javascript 语言的库。我对使用本机 javascript 而不引入新语言语法的 javascript 库感兴趣。
资源、图书馆和实际示例的链接非常受欢迎。
编辑:
了解了更多,我意识到我所说的属于“期货”一词。然而,jQuery 实现了这一点,它总是使用 XHR 调用服务器,服务器在返回结果之前进行处理,而我在做同样的事情而不调用服务器,客户端进行处理但在非阻塞方式。
jquery - 任何基于事件的 jQuery 编程结构的例子?
我已经构建了一个程序,我认为它可以从使用 jQuery 的事件(bind() 和 trigger())而不是典型的函数调用编程结构的转变中受益。例如,而不是:
我可以写:
我正在学习如何有效地使用 bind() 和 trigger() ,但主要是在我进行过程中进行弥补。是否有任何关于如何使用 jQuery 遵循这种事件驱动风格来编程/构造代码的好例子?
programming-languages - 基于事件 == 异步?
“基于事件”与“异步”相同吗?