线程池的设计

我们遇到过的问题

线程数没限制好,导致实际线程大于预设值,超过docker资源上限

没有控制好一个docker同一时间只跑一个任务

导致2个任务同时在一个docker中跑起来了,这样线程数就翻倍了,也导致实际线程大于预设值,超过docker资源上限,被限制了CPU,进而因为CPU资源不足,生成视频很慢。

设计要点

拆分不同的线程池

比如数据的请求、音频的生成、视频的生成,都可以设计为独立的线程池,相互不影响。

平时没有执行到的线程池,处于空置备用状态。用到哪个,再执行哪个。

给每个线程池设置不同的线程数

因为不同的任务,消耗的资源是不一样的,因此我们如果想要将服务器资源利用率提高,就必须给每个任务设置不同的线程数。

比如请求第三方数据,消耗的资源肯定就远远低于截屏生成视频。

假如我们即将部署的服务器是32核的,那么就可以给请求第三方数据的线程池设置线程数为32,

不对啊,不管任务处理快慢,都应该设置线程数和CPU数量一样吧?处理得快的,就会快一步进入下一个处理单元。

常见问题

线程数设置为大于CPU的数量会怎么样?

电脑的8核16线程怎么映射到程序应用上?