我使用.net Framework4.0开发了一个.net应用程序,其中我使用parallel.for()循环进行多线程处理。我使用了以下配置:
我使用了ParallelOptions()类,这个类的"MaxDegreeOfParallelism“属性设置为5,我在日志文件中记录了"Thread.CurrentThread.ManagedThreadId”,以检查是否在运行时创建了5个线程。我在两个不同的环境中测试了这个应用程序。当应用程序在开发它的环境中运行时,它将创建5个线程is。但是,当它在另一个环境中运行时,它正在创建6个或7个线程it。该应用程序仅在第一个环境中编译。我已经使用该应用程序的发布版本在第二个环境中进行测试。有人能帮助我,告诉我为什么会发生这种情况,以及如何解决吗?
发布于 2011-10-28 12:02:15
Parallel.For使用线程池线程。MaxDegreeOfParallelism控制使用的最大并发线程数,而不是5个特定线程--线程池可以自由处理其任何线程上的工作,而Parallel.For确保只有5个线程同时运行。
发布于 2011-10-28 12:01:53
我认为这是因为Parallel.For()只使用动态分区器,因此传入数组可以动态地进行分区,并且每个分区由一个单独的任务/线程处理:
(我相信Parallel.For()也是如此)
- [MSDN: Introduction to PLINQ](http://msdn.microsoft.com/en-us/library/dd997425.aspx)
- [Does Parallel.For use one Task per iteration?](http://blogs.msdn.com/b/pfxteam/archive/2009/05/26/9641563.aspx)
https://stackoverflow.com/questions/7928779
复制相似问题