Task 和Thread在效率上有什么区别
做异步编程的时候,我发现4.0更新了Task 使用lambad表达式,让语法更精简了。但是具体在执行效率上有什么变化么 ?
[解决办法]
Task是依赖于CPU的,如果你的CPU是多核的,Task效率相对要高些
如果是单核的,Task没有什么优势
[解决办法]
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
static class Program
{
static void Main(string[] args)
{
for (var i = 1; i <= 50; i++)
TestTask(i);
for (var i = 1; i <= 50; i++)
TestThreadPool(i);
for (var i = 1; i <= 50; i++)
TestThread(i);
Console.ReadLine();
}
private static void TestThread(int i)
{
Console.WriteLine("Thread {0} start.", i);
new Thread(h =>
{
Thread.Sleep(5000);
Console.WriteLine("-------------------Thread {0} end.", i);
}).Start();
}
private static void TestThreadPool(int i)
{
Console.WriteLine("ThreadPool {0} start.", i);
ThreadPool.QueueUserWorkItem(h =>
{
Thread.Sleep(5000);
Console.WriteLine("-------------------ThreadPool {0} end.", i);
});
}
private static void TestTask(int i)
{
Console.WriteLine("Task {0} start.", i);
new Task(() =>
{
Thread.Sleep(5000);
Console.WriteLine("-------------------Task {0} end.", i);
}).Start();
}
}
}
我主要用于扫描程序这方面。我之前用多线程不理想,所以就发帖问了。还有监控程序用多线程也用的很多的
刚看了一下,学习了
task类似于轻量级的线程池,但是比线程池多了一些有点,比如是状态之类的
另外想问问楼主,有什么实际的情况,要用到这些呢?因为我更偏向于多线程实现。。