【发布时间】:2013-07-08 21:26:58
【问题描述】:
我有一个程序使用多个线程 (300) 来查询 API。目前它表现为一个爬虫,每个线程根据它刚刚处理的 API 调用的结果和一个随机参数来确定它的下一个 Web API 调用。
我已经建立了一个参数列表,它将把“随机参数”排除在等式之外,并通过消除由于使用该随机参数而发生的冗余 API 调用来提高效率。
该列表采用大约 800 万行的文本文件形式。
理想情况下,我希望在我的主线程中拥有一个流读取器对象,该对象将是线程安全的,并且所有 (300) 其他线程在处理完最后一个线程时都将使用它从文本文件中“getLine”一个直到文件用完。
我对我应该看什么有点迷茫,任何建议和答案都将不胜感激!
【问题讨论】:
-
您的意思是您实际上在您的应用程序中有 300 个线程?在不阅读其余问题的情况下,我可以立即说您做错了什么。要回答您的问题,您应该查看ConcurrentQueue。
-
@LasseV.Karlsen 是的,就我每分钟能够扫描多少页而言,300 个线程恰好是最佳线程数。
-
@LasseV.Karlsen 这看起来正是我所需要的,唯一的问题是我是否会遇到将 800 万个 ulong 推入该队列的问题?
-
@Pi_ 如果元素数量少于 X,您应该只添加到队列中,否则请等待读取从队列中删除一些项目,然后再继续读取文件。
-
不要直接使用
ConcurrentQueue。使用BlockingCollection,它为ConcurrentQueue提供了更有用的接口。
标签: c# multithreading file-io concurrency thread-safety