异步编程

时间:2010-01-08 02:58:28

标签: c

gcc 4.4.1

我正在编写一个服务器程序,其中许多客户端将连接到客户端,服务器将管理客户端请求并管理客户端的状态。许多高负载的客户端将成为使用异步编程的决定性因素。但是,我从未在C中做过异步。

但是,根据我的研究结果,我认为我需要使用Async。

1)使用同步编程意味着呼叫将被阻止并且会产生瓶颈。系统只会在高负载下崩溃

2)使用线程进行同步编程会为每个客户端创建一个新线程,这意味着在高负载下系统资源可能会被耗尽并且可能使系统复杂地处理所有这些线程。

3)使用Async意味着我必须开发一个状态机???

有人能指出我正确的方向吗?在Aysnc编程?

非常感谢任何建议,

2 个答案:

答案 0 :(得分:4)

将传入的请求放入队列

使用一个线程来分派队列

从队列中获取的请求在自己的线程中执行;队列可以限制活动线程(线程池)的数量,以防止服务器过载。请求不会丢失,但是他们可能会等待一段时间等待处理。

如果你愿意,队列管理器也可以杀死花费太长时间的线程

祝你好运!

答案 1 :(得分:1)

有很多方法可以解决这个问题。

您可以编写一个监视端口的程序,并在收到请求时生成一个线程。

您可以编写单线程程序并使用inetd将其设置为给定端口的处理程序。只要客户端连接,您的程序实例就会启动。

您可以使用状态机,队列,事件驱动模型,各种各样的东西。

说真的,你需要阅读几本有关网络编程的书籍。在你明白自己在做什么之前,你将很难产生任何有用的东西。

相关问题