我有一个网络
Linux应用程序,它从多个目的地接收RTP流,执行非常简单的数据包修改,然后将流转发到最终目的地.
我如何决定处理数据应该有多少线程?我想,我不能为每个RTP流打开一个线程,因为可能有数千个.我应该考虑到cpu内核的数量吗?还有什么重要的
谢谢.
解决方法
了解在服务器上使用多个线程的目的很重要;服务器中的许多线程用于减少
latency而不是增加速度.通过拥有更多线程,您不会使cpu更快,但是您可能会在给定时间段内始终显示线程来处理请求.
拥有并行移动数据的一堆线程是一个效率低下的射击枪(每个请求创建一个线程自然只是完全失败).使用thread pool模式可以是更有效,集中的方法来减少延迟.
现在,在线程池中,您要拥有至少与cpu /内核一样多的线程.你可以有更多的,但额外的线程将再次只会减少延迟,而不是提高速度.
考虑组织服务器线程的问题类似于在超市中组织一条线.你想有很多收银员工作更慢,还是一个收银员谁超级快?快速收银员的问题不是速度,而是一个有很多杂货的客户可能还会占用很多时间.许多线程的需要来自于几个请求将花费大量时间并阻止所有线程的可能性.通过这个推理,您是否从许多较慢的收银员受益取决于您是否拥有相同数量的杂货或数量不同的数量.回到基本模型,这意味着你必须使用你的线程号码,根据您的流量的特定特征来确定哪些是最优的,看看处理每个请求所花费的时间.