首页 新闻 会员 周边 捐助

关于并行编程Task

0
悬赏园豆:10 [已解决问题] 解决于 2014-07-18 11:12

Task.run不是说可以并行编程,并开启一个任务,但是不理解它如何并行,Parallel.For还是可以理解的,但是这个Task.run就不能理解了

请高人讲解一下task和thread的区别

ExploreForward的主页 ExploreForward | 初学一级 | 园豆:18
提问于:2014-07-17 10:22
< >
分享
最佳答案
1

for(...) {Task.run;} 同 Parallel.For 效果相同。

 

Task 是对 Thread 执行的代码的抽象,它不是 Thread,也不同 Thread 相关。TaskScheduler 负责将 Task 分配到某个 Thread 去执行。

 

你可以从 ATL 中的 CTheadPool 的实现上来理解这个问题:http://msdn.microsoft.com/zh-cn/library/9tz6fz1e.aspx

收获园豆:10
Launcher | 高人七级 |园豆:45050 | 2014-07-17 10:32

for(...) {Task.run;} 同 Parallel.For 效果相同。  -------------效果不同吧

ExploreForward | 园豆:18 (初学一级) | 2014-07-17 10:48

@魂之挽歌--ZXC: 为啥不同?

Launcher | 园豆:45050 (高人七级) | 2014-07-17 10:52

@Launcher: 

for (int i = 0; i < 50; i++)
{
Thread.Sleep(20);
Task.Run(() => { Console.WriteLine(i); });

}
Console.WriteLine("---------------------------------------");
Console.ReadKey();
Parallel.For(0, 50, (i) =>
{
Thread.Sleep(20);
Console.WriteLine(i);
});
Console.ReadKey();

ExploreForward | 园豆:18 (初学一级) | 2014-07-17 11:00

@魂之挽歌--ZXC: 

for (int i = 0; i < 50; i++)

Task.Run(() => { Thread.Sleep(20);Console.WriteLine(i); });
}

 

var tpWorkFunc = ()=>{Thread.Sleep(20);Console.WriteLine(i);};

 

for(....) Task.Run(tpWorkFunc); 

Parallel.For(... tpWorkFunc);  

Launcher | 园豆:45050 (高人七级) | 2014-07-17 11:12

@Launcher: 那么请问 task.run的应用场景

ExploreForward | 园豆:18 (初学一级) | 2014-07-17 16:41

@魂之挽歌--ZXC: 不知道,没用过。

Launcher | 园豆:45050 (高人七级) | 2014-07-17 16:53

@魂之挽歌--ZXC: 鉴于你态度很好,我再告诉你下

for(....) Task.Run(tpWorkFunc); 

Parallel.For(... tpWorkFunc);  

的不同之处。

Parallel.For 会使用负载均衡算法,而且这个算法可以自己定义。也就是说会按照逻辑处理个数和当前资源来分配使用几个 Task 来执行。

Launcher | 园豆:45050 (高人七级) | 2014-07-18 11:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册