我对C语言中的事件驱动编程非常感兴趣,尤其是使用套接字,所以我将花一些时间进行研究。
假设我想要构建一个像客户端/服务器应用程序一样具有大量文件和网络I/O的程序,基本上,第一个问题是这个模型背后的哲学是什么。虽然在正常的编程中,我会产生新的进程,但为什么单个进程实际上可以服务于许多其他请求。例如,有一些web服务器可以在不创建线程或其他进程的情况下处理连接,只需创建一个主进程。
我知道这很复杂,但知道不同的解决方案是如何工作的总是很好的。
发布于 2012-06-16 20:26:37
您一定要阅读以下内容:http://www.kegel.com/c10k.html。该页面是事件驱动和异步技术的完美概述。
然而,事件驱动既不是非阻塞的,也不是异步的,这是一个quick & dirty答案:。
事件驱动意味着,进程将监视其文件描述符(和套接字),并且仅当某个描述符上发生某些事件(事件为:数据接收、错误、变为可写入等)时才采取行动。
BSD套接字有"select()“函数。当被调用时,OS将监视描述符,并在其中一个描述符上发生某些事件时立即返回进程。
然而,上面的网站有更好的描述(以及关于不同API的细节)。
发布于 2016-08-13 05:04:22
“这个模型背后的哲学是什么?”
事件驱动意味着没有“监控”,而是事件本身启动了操作。
通常这是由中断启动的,中断是从外部设备到系统的信号,或者(在软件中断的情况下)异步进程。
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还提供了一些中断驱动套接字的示例,以及其他套接字编程示例。
https://stackoverflow.com/questions/11062674
复制相似问题