MultiThread或Multi Lists?

时间:2009-10-19 07:55:25

标签: multithreading

正如我所看到的那样,不推荐超过200个服务器机器的线程,

我正在尝试实现侦听1000个设备的Listener类,我的意思是1000个设备向该应用程序发送不同类型的消息,

我尝试了两种不同的方式1.为每个设备运行时创建线程和动态列表,其中包含该设备的消息并启动线程以处理来自列表的消息

但我的机器没有创建超过50的线程:),我同意它的坏主意......

  1. 我创建了10个不同的列表,其中包含10种不同类型的消息 我为这些列表创建了10个处理器线程,这些线程进入相关列表并处理消息然后将其删除。
  2. 但是问题就在这里,我说我从列表1中的50个设备收到了50条消息 当它的list1的处理器线程将转到最后一条消息(第50个)时,它的时间将到期,即10秒

    了解最佳架构,与超过500台设备通信并在10秒内处理不同类型的消息。


    我在C#工作,我的应用程序使用tcp / ip作为客户端与服务器连接, 该服务器进一步与在线设备连接,向服务器发送带有设备ID和消息数据的消息和消息,我进一步从该服务器接收消息,然后使用设备ID通过该服务器回复,

2 个答案:

答案 0 :(得分:2)

我认为您需要以不同方式对系统进行分区。监听器应该是高优先级的,但只能将请求排入队列。然后应使用工作池处理队列。您可以在出列方面添加优先级和其他优化。在每个过程完成10年后,您将真正优化系统的后半部分。

想想传统的排队系统。您有一个要处理的工作请求队列。每个请求都有一系列属性。允许相同的Name(字符串)和Priority(int)。一旦工作请求排队,其他工作者(线程/进程等)可以询问队列以根据优先级提取项目并处理它们。

为了获得10s,我会说工作人员一开始处理请求,计时器就会进入,并将该请求标记为10s超时,除非工作人员完成任务。其他工作人员可以查看队列中的工作结果,然后处理响应行为。

答案 1 :(得分:0)

使用除线程之外的其他高度并发编程模型,尽管线程也是高度并发的模型之一。

如果是socket / tcpip / network messaging,请在Linux 2.6x上使用epoll,在win / msvc上使用完成端口。

http://code.google.com/p/effonetmsg/downloads/list查看名为EffoNetMsg.pdf的文档,以了解有关高度并发编程模型的更多信息。我们只使用2或3个线程用于多个侦听器和> 1000个客户端。

相关问题