任务使用内部 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 限制的操作,所以是的,您希望使用线程。但是,并非所有Tasks 都需要线程,例如 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 或任务调度器,然后新线程如何在任务管理器中显示 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

yarn三种调度器(资源调度策略或机制)

调度器分配任务给运行者失败,请重试或联系系统管理员

使用调度者

APScheduler(定时任务二配置调度器)

【leetcode】任务调度器

Laravel 计划任务(任务调度)的使用