【发布时间】:2020-12-09 05:22:36
【问题描述】:
我的任务是更新一个在其操作中非常单线程的 c# 应用程序(非 gui),并向其添加多线程以使其更快地转换工作队列。
每个线程将需要执行非常少量的计算,但大部分工作将调用并等待 SQL Server 请求。因此,与 CPU 时间相比,等待时间更长。
几个要求是:
- 在一些有限的硬件上运行(也就是说,只有几个内核)。当前系统,当它被“推送”时,只需要大约 25% 的 CPU。但是,由于它主要是等待 SQL Server 响应(不同的服务器),因此我们希望能够拥有比内核更多的线程。
- 能够限制线程数。我也不能只拥有无限数量的线程。我不介意通过数组、列表等来限制自己。
- 能够跟踪这些线程何时完成,以便我可以进行一些后期处理。
在我看来,.NET Framework 有很多不同的线程处理方式,我不确定其中一种是否比另一种更好。我不确定我是否应该使用Task、Thread、ThreadPool 或其他东西... appers 我认为async \ await 模型会不不适合这种情况,因为它会等待一项特定任务完成。
【问题讨论】:
-
能否请您发布当前代码?
-
@Enigmativity 当前的代码是一个相当大的项目,我什至不知道从哪里开始分割它,即使是一些片段。这就是为什么我要问一个高层次的问题来试图得到一个高层次的答案。对不起。
-
那么您应该尝试给出一些示例签名,以表明您至少正在拨打的电话。完成这项工作的工具需要匹配。这有点像你问我们如何砍木头——有上百万种工具可以砍木头——但你需要一把拼图还是一把斧头?
-
当前应用中的工作队列是如何管理的?工作是如何被触发的?结果如何?
标签: c# .net multithreading threadpool