【发布时间】:2013-09-08 22:42:11
【问题描述】:
我在可扩展性和处理方面遇到问题,我想征求堆栈溢出社区的意见。
我基本上有来自套接字的 XML 数据,我想处理这些数据。对于发送的每个 XML 行,处理可以包括写入文本文件、打开到另一个服务器的套接字以及使用各种数据库查询;所有这些都需要时间。
目前我的解决方案涉及以下线程: 线程 1 接受传入的套接字,从而生成处理每个套接字的子线程(只有几个来自客户端的传入套接字)。当一条 XML 行通过(StreamReader 上的 ReadLine() 方法)时,我基本上将这条线放入一个队列中,该队列可通过类上的静态方法访问。这个静态方法包含锁定逻辑以确保程序是线程安全的(我当然可以使用并发队列来代替手动锁定)。
线程 2-5 不断地从队列中取出 XML 行并一次处理一个(数据库查询、文件写入等)。
这种方法似乎有效,但我很好奇是否有更好的处理方法,因为这看起来很粗糙。如果我将线程 2-5 执行的处理放到线程 1 中,则会导致性能极慢,这是我所预料的,因此我创建了我的工作线程 (2-5)。
我很感激我可以用线程池替换线程 2-5,但线程池仍会从同一个 XML 行队列中读取,所以我想知道是否有更有效的方法来处理这些事件而不是使用队列?
【问题讨论】:
标签: c# xml multithreading sockets multitasking