我应该使用线程池还是任务并行库
Should I use ThreadPool or Task Parallel Library
正在处理处理用户请求的 .Net 控制台应用程序并将每个处理请求的结果发送回用户(使用 TCP 套接字)
出于测试目的,我创建了少量线程来在多线程上完成这项工作,但是在生产环境中,我需要能够并行处理尽可能多的请求。
我对使用 ThreadPool 还是 TPL 感到困惑。 (每个请求的平均处理时间为3s)有什么建议吗?
这是我当前的代码:
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);
}
}
您应该使用 TPL,因为它将提供更高级别的 抽象,并且比 ThreadPool
.
更好
总是比 Thread
和 ThreadPool
更喜欢 TPL。很难找到使用旧 API 的理由。 Task
提供可组合性、更好的错误处理和 await
.
The average processing time per request is 3s
听起来 LongRunning
选项可能是合适的。调查一下。
正在处理处理用户请求的 .Net 控制台应用程序并将每个处理请求的结果发送回用户(使用 TCP 套接字)
出于测试目的,我创建了少量线程来在多线程上完成这项工作,但是在生产环境中,我需要能够并行处理尽可能多的请求。
我对使用 ThreadPool 还是 TPL 感到困惑。 (每个请求的平均处理时间为3s)有什么建议吗?
这是我当前的代码:
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);
}
}
您应该使用 TPL,因为它将提供更高级别的 抽象,并且比 ThreadPool
.
总是比 Thread
和 ThreadPool
更喜欢 TPL。很难找到使用旧 API 的理由。 Task
提供可组合性、更好的错误处理和 await
.
The average processing time per request is 3s
听起来 LongRunning
选项可能是合适的。调查一下。