C中的事件驱动模型

iND*_*tor 17 c unix linux operating-system event-driven

我对C中的事件驱动编程非常感兴趣,特别是对于套接字,所以我将花一些时间来做我的研究.

让我们假设我想构建一个包含很多文件和网络I/O的程序,比如客户端/服务器应用程序,基本上第一个问题是这个模型背后的哲学是什么.在正常编程中,我会生成新进程,为什么单个进程实际上可以为许多其他请求提供服务.例如,有一些Web服务器可以处理连接而无需创建线程或其他进程,只需一个主要进程.

我知道这很复杂但至少知道这种编程的基础设施是多么好.

Fru*_*nsi 19

您一定要阅读以下内容:http://www.kegel.com/c10k.html.该页面是事件驱动和异步技术的完美概述.

然而,一个快速而肮脏的答案:事件驱动既不是非阻塞的,也不是异步的.

事件驱动意味着进程将监视其文件描述符(和套接字),并仅在某些描述符上发生某些事件时动作(事件是:接收数据,错误,变得可写,......).

BSD套接字具有"select()"功能.调用时,操作系统将监视描述符,并在其中一个描述符发生某些事件后立即返回到该过程.

但是,上面的网站有更好的描述(以及有关不同API的详细信息).


Gra*_*ham 5

“这个模型背后的哲学是什么”

事件驱动意味着没有“监控”,而是事件本身发起操作。

通常,这是由中断启动的,中断是从外部设备发送到系统的信号,或者(在软件中断的情况下)异步进程。

https://en.wikipedia.org/wiki/Interrupt

进一步阅读似乎在这里:

https://docs.oracle.com/cd/E19455-01/806-1017/6jab5di2m/index.html#sockets-40 - “中断驱动的套接字 I/O”

另外,http://cs.baylor.edu/~donahoo/practical/CSockets/textcode.html有一些中断驱动套接字的示例,以及其他套接字编程示例。