关于多线程编程和PLINQ的实例
好久没有发帖了。
我写了大量多线程程序,采用过各种手段来同步线程操作结果。实际上当不太要求非常高性能时,我们可以使用 PLINQ。因为它足够简单!
我举一个例子,假设我要访问csdn的.net论坛的首页列表,找出所有首页上的帖子中、有sp1234回帖(或者发帖)的,那么顺序依次查找每一个帖子,和并发查找帖子相比,慢多少呢?
大家可以自己做一个测试(使用 System.Diagnostics.Stopwatch)。我这里只是把测试代码写出来:
首先需要下载 Html Agility Pack,因为这里使用它分析 html 页面。在引用了它的dll并且在代码中using了它的命名空间之后,测试代码如下
var titles = from row in GetHtml("http://bbs.csdn.net/forums/DotNET/").DocumentNode.SelectSingleNode("//table[@class='table_list parent_forum ']").Elements("tr").Skip(1)
let td = row.Element("td")
where td != null
let a = td.Descendants("a").FirstOrDefault()
where a != null
select new
{
href = a.Attributes["href"].Value,
text = a.InnerText
};
var pages = from t in titles.AsParallel().WithDegreeOfParallelism(64)
where t.href != null
let path = "http://bbs.csdn.net" + t.href
let subQuery = from nick in GetHtml(path).DocumentNode.SelectNodes("//span[@class='name2nick']")
where nick.InnerText == "sp1234"
select nick
where subQuery.Any()
select new
{
title = t.text,
href = path
};
var results = pages.ToList();
from t in titles.AsParallel().WithDegreeOfParallelism(64)改为简单的
from t in titles时,可以测试一下顺序执行需要多少时间。
分享到:
[解决办法]
不常见你发帖。。。
[解决办法]
感谢分享啊,
[解决办法]
[解决办法]
前提是 对性能没有要求,其实就等价于new了N个同步线程
真正高效的多线程类库应该是 基于流水线设计的
[解决办法]
顶一下
[解决办法]
如果我的客户端机器是单核的CPU,那么对于这两句在运行时间上应该是没有区别的,P哥?
from t in titles.AsParallel().WithDegreeOfParallelism(64)
改为简单的
from t in titles