任务使用内部 Theadpool 或任务调度器,然后新线程如何在任务管理器中显示 [重复]
Posted
技术标签:
【中文标题】任务使用内部 Theadpool 或任务调度器,然后新线程如何在任务管理器中显示 [重复]【英文标题】:Task use internal Theadpool or taskscheduler then how new threads shows in task manager [duplicate] 【发布时间】:2020-12-22 07:23:21 【问题描述】:任务代码在进程中创建 14 个线程 -
Task.Run(()=>abc());
Task.Run(() => abc());
Task.Run(() => abc());
Task.Run(() => abc());
Task.Run(() => abc());
Console.Read();
线程代码在进程中创建 10 个线程
线程 t = 新线程(abc); t.Start(); 线程 t1 = 新线程(abc); t1.Start(); 线程 t2 = 新线程(abc); t2.Start(); 线程 t3 = 新线程(abc); t3.Start(); 线程 t4 = 新线程(abc); t4.Start();
【问题讨论】:
您如何为自己证明这一点?任务也不是线程的包装器,尽管任务调度程序可能会在认为有必要和/或感觉需要时释放线程池线程 任务不直接创建任何线程,它们使用线程池中可用的线程。Task.Run()
通常用于受 CPU 限制的操作,所以是的,您希望使用线程。但是,并非所有Task
s 都需要线程,例如 I/O 绑定 IOCP 代码操作,您可能根本找不到线程。对于这些类型的操作,您不会使用Task.Run
。 blog.stephencleary.com/2013/11/there-is-no-thread.html
【参考方案1】:
Task.Run(...)
安排动作/任务在线程池上运行:
将指定的工作排入队列以在线程池上运行,并返回代表该工作的 Task 对象。取消标记允许取消尚未开始的工作。
https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.run?view=netcore-3.1#System_Threading_Tasks_Task_Run_System_Action_
另见:
https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool?view=netcore-3.1
【讨论】:
以上是关于任务使用内部 Theadpool 或任务调度器,然后新线程如何在任务管理器中显示 [重复]的主要内容,如果未能解决你的问题,请参考以下文章