并行思想:提升处理效率
业务场景:
并行思想是一种同时执行多个任务或操作的方法,以提高系统的处理能力和效率。在并行思想中,任务被分解为多个子任务,并且这些子任务可以同时执行,充分利用多核处理器或分布式系统的资源。
案例 1:
智影极速版剪辑器生成视频时,我们会把字幕轨道先合成一个字幕文件并上传到 cos:
因为生成 srt 字幕后还要上传,若串行执行的话,当字幕轨道比较多的时候(比如 10 个)最终的耗时可能就会比较长了。这时,并行处理就能极大地提升效率:
主要使用了 errgroup
这个包,伪代码:
1 | package subtitle |
性能对比:
简单起见,逻辑处理部分的耗时用 sleep 模拟。
file.go
:
1 | // TracksAsSrtSingle 轨道转字幕(串行) |
file_test.go
:
1 |
|
压测结果符合预期:并行 10 个的话,性能提升 10 倍:
1 | cpu: VirtualApple @ 2.50GHz |
细心的读者已经发现,通过并行处理也能变相地实现批量。不一定非要被下游服务提供一个批量接口(2. 批量思想:解决 N+1 问题)。
谚云:人多力量大
在现代操作系统中,我们可以很方便地编写出多进程的程序。多进程间的通信是需要重点考虑的事项之一,这种通信方式叫作 IPC(Inter- Process Communication)。
在 Linux 操作系统中可以使用的 IPC 方法有很多种。从处理机制的角度看,它们可以分为:
并发这个概念由来已久,主要思想是使多个任务可以在同一个时间段内执行,以便能够更快地得到结果。
Go 最明显的优势在于拥有基于多线程的并发编程方式。协程有风险,使用须谨慎。协程不是越多越好,当可能出现大量 goroutine 时,可以考虑使用协程池对其管理。ants 是一个高性能且低损耗的 goroutine 池。