一个大型线程任务处理程序的c#核心实现
本文关键字:程序 核心 实现 任务处理 线程 一个 大型 | 更新日期: 2023-09-27 18:17:02
我正在用c#写一个web scraper。我使用Thread
对象来实现它,该对象从任务池中获取工作,并根据回调处理所有这些元素并存储结果。任务池意味着5K - 50K个输入url。
是否有任何核心框架对象可以处理这样的事情?我试着看看Threadpool
是否可以实例化,但它不能。我也很不确定这么多的任务是否可以/应该排队到默认的Threadpool
。
那么,在核心中是否已经有任何东西可以用于创建大量任务和许多线程,并让这些线程处理这些任务?还是我应该坚持我自己的想法。自从我开始使用c#以来,我已经重新发明了一些轮子。
有。
http://msdn.microsoft.com/en-us/library/dd460717%28v=vs.110%29.aspx任务并行库(TPL)
任务并行库(TPL)是系统中的一组公共类型和api。Threading和System.Threading.Tasks命名空间。TPL的目的是通过简化向应用程序添加并行性和并发性的过程来提高开发人员的生产力。TPL动态地扩展并发程度,以便最有效地使用所有可用的处理器。此外,TPL还处理工作分区、线程池上的线程调度、取消支持、状态管理和其他低级细节。通过使用TPL,您可以最大限度地提高代码的性能,同时专注于程序设计要完成的工作。
默认使用TaskScheduler将任务排队到线程池中。调度器的工作是促进可用线程和处理器的有效使用。
你可能还会对它上面的Dataflow API感兴趣。
http://msdn.microsoft.com/en-us/library/hh228603%28v=vs.110%29.aspx数据流
此数据流模型通过为粗粒度数据流和流水线任务提供进程内消息传递来促进基于参与者的编程。数据流组件建立在TPL的类型和调度基础设施之上,并与c#、Visual Basic和f#语言集成,支持异步编程。当您有多个必须彼此异步通信的操作时,或者当您希望在数据可用时处理数据时,这些数据流组件非常有用。