.net 在任务中用红线标出CPU是否智能。运行
我知道创建太多线程(线程饥饿)对我的应用程序的性能有害,但我不确定这如何转化为异步/等待功能。我知道Task.Run()使用线程池来执行其代码。我还读到它并不总是创建一个新的线程 现在我有三点我找不到答案:.net 在任务中用红线标出CPU是否智能。运行,.net,vb.net,multithreading,performance,async-await,.net,Vb.net,Multithreading,Performance,Async Await,我知道创建太多线程(线程饥饿)对我的应用程序的性能有害,但我不确定这如何转化为异步/等待功能。我知道Task.Run()使用线程池来执行其代码。我还读到它并不总是创建一个新的线程 现在我有三点我找不到答案: 我是否需要确保没有太多的线程是手动的,还是由.Net Framework管理 此代码会导致线程饥饿吗 Dim ltsk As List(Of Task) For Each pers As Person In ListPerson 'Potentialy big Collection of O
Dim ltsk As List(Of Task)
For Each pers As Person In ListPerson 'Potentialy big Collection of Objects
ltsk.Add(Task.Run(Sub() pers.CheckPerson)) 'Long running function with own Task.Run() inside
Next
Task.WhenAll(ltsk)
Dim i As Integer = 0
Task.Run(Sub() i += 1) 'I know its an insane example
Task
是一部分)有几种启发式方法来防止CPU不足。此外,Windows使用动态优先级,这意味着如果您使用线程池线程来执行CPU工作,它们将自动以较低的优先级运行
一,。我是否需要确保没有太多的线程是手动的,还是由.Net Framework管理
它由框架管理
二,。此代码会导致线程饥饿吗
Dim ltsk As List(Of Task)
For Each pers As Person In ListPerson 'Potentialy big Collection of Objects
ltsk.Add(Task.Run(Sub() pers.CheckPerson)) 'Long running function with own Task.Run() inside
Next
Task.WhenAll(ltsk)
没有
三,。这是否会创建线程
Dim i As Integer = 0
Task.Run(Sub() i += 1) 'I know its an insane example
它将工作项排入线程池队列。如果线程池的工作量超过了它的能力,它可能会决定创建另一个线程
如果你在做实际的并行处理(CPU密集型工作),那么你应该考虑使用<代码>并行或并行LINQ而不是直接使用<代码>任务。
< P>任务并行库(其中代码<任务>代码>是一个部分)有几种启发式方法来防止CPU饥饿。此外,Windows使用动态优先级,这意味着如果您使用线程池线程来执行CPU工作,它们将自动以较低的优先级运行 一,。我是否需要确保没有太多的线程是手动的,还是由.Net Framework管理 它由框架管理 二,。此代码会导致线程饥饿吗Dim ltsk As List(Of Task)
For Each pers As Person In ListPerson 'Potentialy big Collection of Objects
ltsk.Add(Task.Run(Sub() pers.CheckPerson)) 'Long running function with own Task.Run() inside
Next
Task.WhenAll(ltsk)
没有
三,。这是否会创建线程
Dim i As Integer = 0
Task.Run(Sub() i += 1) 'I know its an insane example
它将工作项排入线程池队列。如果线程池的工作量超过了它的能力,它可能会决定创建另一个线程
如果你在做实际的并行处理(CPU密集型工作),那么你应该考虑使用<代码>并行< /代码>或并行LINQ而不是直接使用<代码>任务<代码>。使用
并行
而不是自己处理任务
到底有什么好处?并行
(和并行LINQ)有许多更高层次的结构,例如“对输入序列执行此操作”、“总结结果”等。使用任务
你必须手工完成所有这些。e、 例如,Parallel.ForEach(ListPerson,pers=>pers.CheckPerson())
。Parallel
和并行LINQ都使用“分区”来提高并行代码的效率。谢谢你为我澄清了一些事情。使用并行
而不是自己处理任务
到底有什么好处?并行
(和并行LINQ)有许多更高层次的结构,例如“对输入序列执行此操作”、“总结结果”等。使用任务
你必须手工完成所有这些。e、 例如,Parallel.ForEach(ListPerson,pers=>pers.CheckPerson())
。并行和并行LINQ都使用“分区”来提高并行代码的效率。