【问题标题】:Should I use ThreadPool or Task Parallel Library我应该使用 ThreadPool 还是任务并行库
【发布时间】:2015-09-14 11:09:12
【问题描述】:

在处理用户请求的 .Net 控制台应用程序上工作并将每个处理请求的结果发送回用户(使用 TCP 套接字)

出于测试目的,我创建了少量线程来在多个线程上完成这项工作,但在转向生产时,我需要能够并行处理尽可能多的请求。

我对使用 ThreadPool 或 TPL 感到困惑。 (每个请求的平均处理时间为 3 秒)有什么建议吗?

这是我当前的代码:

 public void Start()
    {
        started = true;
        Thread looper = new Thread(new ThreadStart(BufferRunner));
        looper.Start();
        Thread looper2 = new Thread(new ThreadStart(BufferRunner));
        looper2.Start();
        Thread looper3 = new Thread(new ThreadStart(BufferRunner));
        looper3.Start();
        Thread looper4 = new Thread(new ThreadStart(BufferRunner));
        looper4.Start();
    }

    private void BufferRunner()
    {
        while (started)
        {
            BufferedCommand command = null;
            lock (buffer)
            {
                if (buffer.Count > 0)
                    command = buffer.Dequeue();//buffer.Enqueue happens when user request is received
            }
            if (command != null)
               ExecuteCommand(command);
        }
    }

【问题讨论】:

    标签: .net multithreading task-parallel-library


    【解决方案1】:

    您应该使用 TPL,因为它会提供更高级别的抽象,并且比 ThreadPool 更好。

    【讨论】:

      【解决方案2】:

      总是更喜欢 TPL 而不是 ThreadThreadPool。很难找到使用旧 API 的理由。 Task 提供可组合性、更好的错误处理和await

      每个请求的平均处理时间为 3s

      听起来LongRunning 选项可能是合适的。调查一下。

      【讨论】:

      • 我用 Tasks 实现了一个版本,并将运行一些测试。但是,我仍然不确定是否应该使用“LongRunning”选项,仍在学习任务。谢谢!
      猜你喜欢
      • 2011-07-09
      • 1970-01-01
      • 2014-03-28
      • 2010-10-10
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      相关资源
      最近更新 更多