none
c#线程池工作原理 RRS feed

  • 问题

  • 大家好,我想请教大家一个问题。

    c#中线程池的工作原理是什么?线程池ThreadPool和Task的区别在哪里?


    2017年12月6日 9:57

答案

  • Hi,

    欢迎在MSDN论坛发帖。

    据我理解,线程池是不支持所有的线程状态的,比如不支持线程的取消、完成、失败通知等交互性操作, 还有不支持线程执行的先后次序。

    所以感觉线程池有点不方便,就出现了task。 task 就会支持下面的状态。

    1: IsCanceled,因为被取消而完成;

    2: IsCompleted,成功完成;

    3: IsFaulted,因为发生异常而完成

    这是我对他们的理解,也许片面,只代表本人观点。

    根据MSDN的规则,如果你的问题已经得到解决,请及时标记有用的回复作为答案; 如果你想问新的问题,请重新开个新帖。

    这样也会帮助其他人遇到相同的问题。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 Juster.zhu 2017年12月11日 1:42
    2017年12月7日 7:14
    版主

全部回复

  • 工作原理参考网上的解释,说的都比较详细。

    如过想了解深层次的原理,可以用.NET Reflector反编译这2个类的源代码,秘密都在代码中。

    线程(thread)是CPU的调度单元,Task是多核CPU并行计算的实现方案,将任务调度分布到多个的CPU中并行运算。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年12月7日 0:46
  • 工作原理参考网上的解释,说的都比较详细。

    如过想了解深层次的原理,可以用.NET Reflector反编译这2个类的源代码,秘密都在代码中。

    线程(thread)是CPU的调度单元,Task是多核CPU并行计算的实现方案,将任务调度分布到多个的CPU中并行运算。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    你好,感谢回答。感觉网上搜索到的文章博客太多,选择太多并不能发现之中的“优解”这让我非常苦恼。第二个问题问的是线程池。
    2017年12月7日 1:38
  • Hi,

    欢迎在MSDN论坛发帖。

    据我理解,线程池是不支持所有的线程状态的,比如不支持线程的取消、完成、失败通知等交互性操作, 还有不支持线程执行的先后次序。

    所以感觉线程池有点不方便,就出现了task。 task 就会支持下面的状态。

    1: IsCanceled,因为被取消而完成;

    2: IsCompleted,成功完成;

    3: IsFaulted,因为发生异常而完成

    这是我对他们的理解,也许片面,只代表本人观点。

    根据MSDN的规则,如果你的问题已经得到解决,请及时标记有用的回复作为答案; 如果你想问新的问题,请重新开个新帖。

    这样也会帮助其他人遇到相同的问题。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 Juster.zhu 2017年12月11日 1:42
    2017年12月7日 7:14
    版主
  • Hi,

    欢迎在MSDN论坛发帖。

    据我理解,线程池是不支持所有的线程状态的,比如不支持线程的取消、完成、失败通知等交互性操作, 还有不支持线程执行的先后次序。

    所以感觉线程池有点不方便,就出现了task。 task 就会支持下面的状态。

    1: IsCanceled,因为被取消而完成;

    2: IsCompleted,成功完成;

    3: IsFaulted,因为发生异常而完成

    这是我对他们的理解,也许片面,只代表本人观点。

    根据MSDN的规则,如果你的问题已经得到解决,请及时标记有用的回复作为答案; 如果你想问新的问题,请重新开个新帖。

    这样也会帮助其他人遇到相同的问题。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    Hart Wang 你好,感谢回答。

    那能讲一下线程池的工作原理吗?可能问题有些宽泛我举个应用场景吧。

    一个线程池中,有A、B、C三个线程,A执行完任务之后系统会有哪些操作?此时B、C又处于什么状态?假设又来了一次任务系统会把任务分配给哪个线程呢?有优先级吗?

    2017年12月7日 8:46
  • 该问题我已经在CSDN上找到相关的博客解决当前提问

    http://blog.csdn.net/u014511737/article/details/47440495

    结贴

    2017年12月11日 1:42