我正在开发一个小型库,它使用任务并行库来运行并行搜索以寻找解决方案。当前的设计遵循以下原则:
- ConcurrentQueue 接收 Searches 的结果,
- 一个主任务作为一个循环工作,作为一个后台线程运行。当一个新的解决方案到达队列时,它会出列并处理它,然后在一个新任务上启动一个新的搜索,
- 搜索在其自己的任务中启动,并在完成后将其结果返回到队列。
[根据 Eric J 的回答进行编辑:所涉及的活动完全受 CPU 限制,不涉及 IO]
该框架目前运行良好。但是,我可以完全控制将触发的搜索任务的数量,并且我的理解是,虽然 TPL 目前可以很好地处理这种情况,但将大量搜索推向系统不会导致并行度增加,因为它会受到系统上可用的核心数量的限制,并且在达到一定水平后会适得其反。
我的问题如下:我可以通过限制将运行的搜索任务的数量来“帮助”TPL,如果可以,我将如何确定上限应该是多少?例如基于 System.Environment.ProcessorCount 限制它是否合适?