我正在构建一个高交易量系统,其核心具有递归功能。
简而言之,我想创建一个蜘蛛,它将转向并提取在页面链接中找到的URL,然后获取每个URL并继续执行某些操作。负载在短时间内可以成倍增加,因此我想尽最大努力使这些代码尽可能简化和高效。
我应该使用线程吗?如果是这样(逻辑是什么样的)
我正在使用最新的asp.net c#和VS2010与.net4,并希望新技术有一些简单的方法让我这样做,并隐藏所有复杂性,同时有效和超快地处理逻辑。 / p>
答案 0 :(得分:2)
你不应该为蜘蛛使用递归。您应该有一个分析页面的任务,并执行您要对该页面执行的任何操作。如果它找到了链接,它应该将它添加到链接队列中(确保你不会多次处理一个链接,否则你将最终得到一个无限循环)。主处理器只会通过队列并处理链接。
答案 1 :(得分:1)
.NET的任务并行库为您的问题提供了一个很好的解决方案。有关详细信息,请参阅this MSDN Magazine article。
TPL旨在完成并行执行,但为您处理线程。它还可以让您轻松等待任务完成,并在完成另一组任务后运行一项任务,等等。
在您的情况下,这意味着“父”将为文档中的每个链接启动任务,然后可以在必要时等待子任务完成。子任务可以递归地启动子任务等。无需担心线程。