一个高频问题:异步操作会创建线程吗?
总结:开不开启新的线程,主要取决于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 方法进去 已释放队列 等待线程队列。