我的问题是围绕任务的执行和优化资源 . 我通过轮询数据库来获取一组任务 . 大多数这些任务都执行以下操作:

  • 连接到另一台服务器(SQL,MDX,Webservice等)和查询数据 . (不是I / O密集型)

  • 接收数据并保存到服务器上文件夹中的文件(I / O工作)

目前,我正在接近创建任务元数据队列 . 拾取任务元数据并创建任务(以便它运行单独的线程)并执行 . 我现在已将并发任务的数量限制为可用的处理器核心数 .

显然,我正在考虑最大化服务器资源,以便我尽快处理大多数任务 . 我所看到的是,是否有机会改善 .

这是我看待它的方式 . 如果你看看我的第一个操作步骤,它不是I / O密集型工作,而只是调用一个单独的服务器,但这些调用可以长时间运行 . 第二步是I / O工作(但不是太强烈)因为它只是保存数据 .

例如,假设我有2个处理器核心和4个待处理任务来完成(Task1,Task2,Task3,Task4) . 将拾取Task1和Task2,并且线程(假设Thread1,Thread2)分别在Taks1和Task2上工作 . 线程Thread1和Thread2在我的情况下被阻塞,直到它完成(使用数据检索和保存文件) . 完成后,他们会选择Task3和Task4 .

我在想什么(现在只是一个理论)如果我可以在单独的线程上将操作的第一步调用为异步,以便这些线程不等待整个步骤完成 . 例如,Thread1,Thread2可以分别启动一个单独的线程(比如说Thread1A,Thread2A)来分别对服务器进行数据调用,并在完成时返回给Thread1和Thread2 . 然后线程Thread1和Thread2(空闲时)接收数据并将其写入文件 . 它的作用是同时Thread1和Thread2也可以在Task3和Task4上运行 .

这是一种可行的方法吗?或者有更好的方法来解决这个问题 . 还想知道我可以为这些类型的操作创建的最大线程数:

  • 调用数据库服务器/服务 .

  • I / O操作(创建文件,写入文件等)

请建议 . 任何指针/示例代码或链接都会有所帮助 .

此致,Girija Shankar