我希望澄清我对.NET多线程的理解,特别是哪些.NET方法会创建线程,在多处理器/核心系统中可能同时执行。在.NET TPL框架中,您可以使用Parallel.Invoke或Task.Factory.StartNew方法实现某种形式的并行性。我理解,在两种情况下,.NET都会创建新的任务(在Parallel.Invoke背后),然后.NET环境会将这些任务分配给管理线程,这些线程然后被分配到CPU上,根据工作负载可能分配到不同的核心或处理器上。两种方法之间的主要区别在于语义-Parallel.Invoke执行多个任务并等待它们完成;Task.Factory.StartNew在后台启动一个新任务。在两种情况下,实际工作可能在不同的核心或处理器上完成。根据任务并行库(TPL)。我有一个同事坚信只有Parallel.Invoke方法允许线程在不同的核心/处理器上执行,而Task.Factory.StartNew会启动一个新线程,但该线程只会在一个核心/处理器上调度-因此实际上没有提供并行性。
我找不到任何明确说明这一点的文档或文章。我的同事给我推荐了和我正在查看的相同的文章,例如基于任务的异步编程,我认为这些文章证实了我的理解,但是我的同事认为证实了他的理解。
有时候文档会在引用Parallel.Invoke时使用术语“并行处理”,在引用“Task.Factory.StartNew”时使用“异步任务”,但据我所知,关于分配到多个处理器/核心方面,背后发生的事情都是相同的。
如果可能的话,请有人帮助澄清这种情况,并提供文档/文章链接。
我知道这听起来像是在寻求解决与同事的争论,但我真的想澄清我是否正确理解了这个问题。
我找不到任何明确说明这一点的文档或文章。我的同事给我推荐了和我正在查看的相同的文章,例如基于任务的异步编程,我认为这些文章证实了我的理解,但是我的同事认为证实了他的理解。
有时候文档会在引用Parallel.Invoke时使用术语“并行处理”,在引用“Task.Factory.StartNew”时使用“异步任务”,但据我所知,关于分配到多个处理器/核心方面,背后发生的事情都是相同的。
如果可能的话,请有人帮助澄清这种情况,并提供文档/文章链接。
我知道这听起来像是在寻求解决与同事的争论,但我真的想澄清我是否正确理解了这个问题。