c# - 如果没有线程回调异步函数怎么办
问题描述
我认为,当我们发出异步请求时,线程池中的一个线程将被分配给该请求,并且当该请求作为 sql 查询进入数据库时,直到查询完成,分配给该请求的线程将被释放,然后另一个请求可以使用该线程。
所以我的问题是让我们考虑一下所有线程都已分配给请求并且线程池中没有线程的情况。然后想象一下触发了一个 sql 查询的回调,以及由于线程池中没有空闲线程,CPU 如何处理这个回调。
解决方案
通常,处理器管理线程的堆栈,但如果您开始在编程级别不受任何控制地抛出线程,它可能会阻塞开发人员,实际上是应用程序,最大线程数由可用的物理资源量决定。
ThreadPool.GetAvailalbeThreads 返回池中当前可用的线程数。它是最大线程数减去当前活动线程数。
ThreadPool.GetAvailableThreads(out workers, out ports);
推荐阅读
- extjs - Extjs 验证表单复选框字段
- javascript - Highcharts 动态数据更新失败
- c# - 实体框架核心和延迟加载问题
- html - 允许 html 文件在 iframe django 中显示
- python - 从列表中迭代熊猫数据框
- python - 打印嵌套字典循环 YYYYMMDD
- apache-spark - Py4JError:调用 o52.fit 时出错
- php - dns_get_record 它失败了,我能够控制错误
- r - 如何保存2次多项式线性模型的系数并稍后在R中进行预测?
- ruby-on-rails - 修复 TypeError:没有将 Arel::Nodes::SqlLiteral 隐式转换为 Integer