首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带套接字的C语言事件驱动模型

带套接字的C语言事件驱动模型
EN

Stack Overflow用户
提问于 2012-06-16 18:32:38
回答 5查看 32.1K关注 0票数 23

我对C语言中的事件驱动编程非常感兴趣,尤其是使用套接字,所以我将花一些时间进行研究。

假设我想要构建一个像客户端/服务器应用程序一样具有大量文件和网络I/O的程序,基本上,第一个问题是这个模型背后的哲学是什么。虽然在正常的编程中,我会产生新的进程,但为什么单个进程实际上可以服务于许多其他请求。例如,有一些web服务器可以在不创建线程或其他进程的情况下处理连接,只需创建一个主进程。

我知道这很复杂,但知道不同的解决方案是如何工作的总是很好的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-16 20:26:37

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

然而,事件驱动既不是非阻塞的,也不是异步的,这是一个quick & dirty答案:。

事件驱动意味着,进程将监视其文件描述符(和套接字),并且仅当某个描述符上发生某些事件(事件为:数据接收、错误、变为可写入等)时才采取行动。

BSD套接字有"select()“函数。当被调用时,OS将监视描述符,并在其中一个描述符上发生某些事件时立即返回进程。

然而,上面的网站有更好的描述(以及关于不同API的细节)。

票数 21
EN

Stack Overflow用户

发布于 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还提供了一些中断驱动套接字的示例,以及其他套接字编程示例。

票数 3
EN

Stack Overflow用户

发布于 2012-06-16 20:30:10

事件驱动编程基于事件循环。循环只是等待一个新事件,调度代码来处理该事件,然后循环回来等待下一个事件。在套接字的情况下,您谈论的是“异步网络编程”。这涉及到select()或Kqueue()等其他选项来等待事件循环中的事件。套接字需要设置为非阻塞,这样当您读取()或写入()时,您的代码不会等待I/O完成。

异步网络编程可能非常复杂,并且很难正确掌握。看看herehere的几个介绍。我强烈建议使用像libeventliboop这样的库来解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11062674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档