作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题已经在这里有了答案:
已关闭8年。
Possible Duplicate:
What is the difference between task and thread?
const int taskCount = 100;
var tasks = new Task[taskCount];
var loopVal = (int) Math.Ceiling(1.0*EmailAddress.Count/taskCount);
for (int i = 0; i < taskCount; i++)
{
var objContainer = new AutoCheck(i*loopVal, i*loopVal + loopVal);
tasks[i] = new Task(objContainer.CheckMail);
tasks[i].Start();
}
Task.WaitAll(tasks);
const int threadCount = 100;
var threads = new Thread[threadCount];
var loopVal = (int)Math.Ceiling(1.0 * EmailAddress.Count / threadCount);
for (int i = 0; i < threadCount; i++)
{
var objContainer = new AutoCheck(i * loopVal, i * loopVal + loopVal);
threads[i] = new Thread(objContainer.CheckMail);
threads[i].Start();
}
foreach (Thread t in threads)
t.Join();
runningTime.Stop();
Console.WriteLine(runningTime.Elapsed);
最佳答案
任务不一定与线程相对应。任务库将以比您的线程代码更有效的方式将它们调度到线程池线程。
创建线程非常昂贵。任务将排队并在线程可用时重用线程,因此当线程等待网络IO时,实际上可以将其重用以执行另一个任务。闲置的线程浪费资源。您只能(同时)执行与处理器内核数量相对应的线程数,因此100个线程意味着上下文在所有内核上的切换至少每个25次。
如果使用任务,只需将所有1000个电子邮件处理任务排入队列,而不是将它们分批处理并使其撕裂。任务库将处理要在其上运行多少线程。
关于c# - C#中的多线程和多任务处理之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922552/
我是一名优秀的程序员,十分优秀!