线程池的设计
我们遇到过的问题
线程数没限制好,导致实际线程大于预设值,超过docker资源上限
没有控制好一个docker同一时间只跑一个任务
导致2个任务同时在一个docker中跑起来了,这样线程数就翻倍了,也导致实际线程大于预设值,超过docker资源上限,被限制了CPU,进而因为CPU资源不足,生成视频很慢。
设计要点
拆分不同的线程池
比如数据的请求、音频的生成、视频的生成,都可以设计为独立的线程池,相互不影响。
平时没有执行到的线程池,处于空置备用状态。用到哪个,再执行哪个。
给每个线程池设置不同的线程数
因为不同的任务,消耗的资源是不一样的,因此我们如果想要将服务器资源利用率提高,就必须给每个任务设置不同的线程数。
比如请求第三方数据,消耗的资源肯定就远远低于截屏生成视频。
假如我们即将部署的服务器是32核的,那么就可以给请求第三方数据的线程池设置线程数为32,
不对啊,不管任务处理快慢,都应该设置线程数和CPU数量一样吧?处理得快的,就会快一步进入下一个处理单元。