C#/.NET 异步操作会生成新线程吗
C#/.NET 异步操作会生成新线程吗
总结:开不开启新的线程,主要取决于IO线程的状态
1.要是IO线程被阻塞了,那么会开启新的线程
2.要是电脑的所有"逻辑处理器"12个线程都是在Running状态的话,就不会开启新的线程
开不开起新的线程基本取决与IO线程,如果核心数都是Running,那么不会开启新的线程;
如果IO线程被阻塞了(Lock,Sleep),把IO线程给卡住了,这时候要是不断的有新的WorkThread进入到任务队列的话,
这个时候就要生成新的IO线程去接收你的任务
遇到 Sleep 或者 lock 情况
如果 t1 在执行的时候,遇到了 Sleep 或者 lock 锁时需要被迫停止, 此时系统会将 t1 线程送到 已暂停线程队列 中, 如果都 sleep 了,那 NumberOfConcurrentThreads 就会变为 0 , 此时就会遇到无人可用的情况,那怎么办呢? 只能让系统从 线程池 中申请更多的线程来从 q1 队列中提取任务, 当某个时刻, 已暂停线程队列 中的线程激活,那么它又回到了 已释放队列 中继续执行任务, 当任务执行完之后, 再次调用 GetQueuedCompletionStatus 方法进去 已释放队列 等待线程队列。
如何查看IO线程
如果才能知道IO线程被阻塞了,还是Running状态
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。