后台任务优化资源的使用

时间:2015-08-20 04:31:23

标签: c# multithreading task scheduled-tasks

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

  1. 连接到另一台服务器(SQL,MDX,Webservice等)并查询数据。 (不是I / O密集型)
  2. 接收数据并保存到服务器上的文件夹(I / O工作)中的文件
  3. 目前,我正在接近创建任务元数据队列。拾取任务元数据并创建任务(以便它运行单独的线程)并执行。我现在已将并发任务的数量限制为可用的处理器核心数。

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

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

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

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

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

    1. 调用数据库服务器/服务。
    2. I / O操作(创建文件,写文件等)
    3. 请建议。任何指针/示例代码或链接都会有所帮助。

      此致 Girija Shankar

0 个答案:

没有答案