也就是说,假设1个核心能同时运行2个线程,当主线程所在的CPU核心还有一个子线程在运行,Task会去找其他核心的空闲线程吗?
标签:
也就是说,假设1个核心能同时运行2个线程,当主线程所在的CPU核心还有一个子线程在运行,Task会去找其他核心的空闲线程吗?
题主是说的TPL编程吧。
优秀软件的一个关键特征就是具有并发性。过去的几十年,我们可以进行并发编程,但是
难度很大。以前,并发性软件的编写、调试和维护都很难,这导致很多开发人员为图省事
放弃了并发编程。新版 .NET 中的程序库和语言特征,已经让并发编程变得简单多了。随
着 Visual Studio 2012 的发布,微软明显降低了并发编程的门槛。以前只有专家才能做并发
编程,而今天,每一个开发人员都能够(而且应该)接受并发编程。
许多个人电脑和工作站都有多核CPU,可以同时执行多个线程。为了充分利用硬件,您可以将代码并行化,以便跨多个处理器分发工作。
更多可以参考这篇文章《并发编程是什么鬼》
C#的Task与线程没有什么关系,只是Task最终需要一个线程去执行。
决定Task在哪个线程上执行的是TaskScheduler,默认的调度器是线程池调度器,也就是默认Task在线程池线程中执行。
还有其他的调度器,可以让Task在指定的线程执行,甚至说,可以自定义一个调度器,让每一个Task都在一个新线程中执行。
我觉得是可以的,虽然我没有试过。