问题标签 [event-based-programming]

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.

0 投票
0 回答
55 浏览

c - 使用 I/O 多路复用时 select() 何时返回

我是 C 和 I/O 多路复用的新手,只是一个关于select().

根据手册页select(): 允许程序监视多个文件描述符,等待至少或多个文件描述符“准备好”用于某些类的 I/O 操作。返回值是就绪描述符的计数。我对返回值有点困惑。

因此,假设一个并发 Web 服务器使用select(),并且有 2 个客户端(连接文件描述符)连接到服务器。如果客户端 A 正在写 sth 而客户端 B 还没有写,当然select()返回 1 并修改fdset.

但是我看到了一些代码,select()它可以在多个文件描述符准备好时返回,这意味着select()可以返回 2,3,....等。

这是我的问题:

据我了解,select()当一个 fd 可用以避免阻塞时应尽快返回,因此如果select()可以检测到多个 fd,并考虑每个 fd 不会同时准备好(例如第一个 fd 在 1.0s 准备好第二个是准备好 1.1s,它们不能都在 1.0s 准备好),那么如何select()知道当第一个 fd 准备好时它遇到时,它不应该立即返回,而是等到下一个 fd 准备好?既然select()无法预测,它怎么知道会有第二个准备好的fd?

或者

的底层机制select()是,它被阻塞直到第一个 fd 准备好,然后它等待一个预定义的时间以确保它可以在超时之前捕获其他读取的 fd,这样select()至少可以返回 1?

0 投票
0 回答
71 浏览

linux - linux内核如何监听解锁事件?

我有一个学生问题

我最近了解了诸如系统调用之类的如何read阻塞进程,并且这些进程将处于阻塞状态,直到数据在它所读取的任何内容中变得可用。或者waitpid可以阻塞一个进程,直到子进程状态发生变化。

更一般地说,维基百科说

如果没有外部状态变化或事件发生https://en.wikipedia.org/wiki/Process_state,它就无法继续进行时,进程将转换为阻塞状态

内核如何以最小化开销成本的方式监听这些状态变化或事件?我仍在学习,但肯定不能使用轮询,因为那太慢了,对吧?此外,“事件”似乎是抽象的,这意味着我不能假设这些是特定的硬件事件,在这种情况下可以使用硬件中断。

0 投票
1 回答
53 浏览

c# - 如何转换事件处理程序参数进入异步/等待?

我必须使用以下 API(基本上我必须在Stan订阅主题/频道/主题):

我想将 EAP 模式转换为 TAP 模式。我所做的如下:

第一条消息一切正常,但下一条消息抛出以下异常:

An attempt was made to transition a task to a final state when it had already completed

我阅读了一些文章和主题,例如:

据我所知(我对 EventHandler 的高级应用不太了解)在这两种情况下,它们都直接从类中访问 EventHandler,在我的情况下,EventHandler 作为参数传递,我不确定如何取消订阅。

干杯!