日期:2014-05-17  浏览次数:21003 次

Task 和Thread在效率上有什么区别
做异步编程的时候,我发现4.0更新了Task 使用lambad表达式,让语法更精简了。但是具体在执行效率上有什么变化么 ?

------解决方案--------------------
Task是依赖于CPU的,如果你的CPU是多核的,Task效率相对要高些
如果是单核的,Task没有什么优势
------解决方案--------------------
引用:
Quote: 引用:

Task是依赖于CPU的,如果你的CPU是多核的,Task效率相对要高些
如果是单核的,Task没有什么优势
也就是说直接用Thread做多线程和 用Task目前还是看不出太大的区别吧 。

性能问题永远都是靠测试和实际使用才能得出可靠的结论,任何纸上谈兵的结论都可以当作猜想,不能作为实际生产的依据。
------解决方案--------------------
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)