2010-01-08 83 views
3

GCC 4.4.1异步编程

我写一个服务器程序有许多客户端将连接到客户端和服务器将管理客户端请求并管理客户端的状态。高负载下的许多客户端将成为使用异步编程的决定性因素。然而,我从来没有在C中做过Async。但是,从我所了解的我的研究中,我认为我需要使用Async。

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

2)使用使用线程的同步编程会为每个客户端创建一个新线程,这意味着在高负载下系统资源可能会用完,并可能使系统处理复杂的处理那些线程。

3)使用异步意味着我将不得不开发一个状态机?

任何人都可以指向正确的方向吗?在Aysnc编程?

非常感谢任何建议,

+4

160个问题;不到60%接受... – 2010-01-08 03:00:04

+3

至少他击败了这个家伙 - http://stackoverflow.com/users/68183/mrblah – danben 2010-01-08 03:03:21

+0

答案是:是的,去异步和是的,你需要一个FSM。 – jldupont 2010-01-08 03:06:38

回答

4

把传入的请求进入队列

使用一个线程分派队列从队列中取出

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

队列管理器也可以杀死那些太长的线程,如果你喜欢

好运!

+0

你好。感谢您的回答。队列将以链表的形式出现。调度员会从队列中获取请求吗?非常感谢。 – ant2009 2010-01-08 17:21:47

+1

@ [robUK]:不管你喜欢,你都可以实现队列,是的,调度器从队列中提取请求并在他们自己的线程中处理它们 – 2010-01-09 16:57:55

1

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

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

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

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

说真的,你需要阅读一些关于网络编程的书籍。直到你明白你在做什么,你才会努力产生有用的东西。