多线程是一种并发编程技术,它允许程序同时执行多个线程,从而提高程序运行速度。
在开始多线程优化之前,先看两个概念:进程和线程。
进程我们可以简单粗暴的理解为一个应用进程,比如你在电脑上开一个QQ聊天,那么一个QQ应用就是一个进程,但如果你用一个QQ和多人同时聊天,可以认为每个人聊天都是一个线程,你此时在多线程工作。
对应到 C++ 的 resnet50 示例中,当你在 linux 上执行 ./resnet 时,就开启了一个进程,在没有进行多线程编程的情况下,resnet 默认使用一个线程。如果你的 CPU 是多核比如 8 核,那么可能只用到了一个 CPU 核来进行计算。
因此你可能明白了,多线程编程,可以使程序用多个 CPU 核并行计算。而目前大部分的电脑,早就是多核CPU了,因此不用多线程编程纯粹就是浪费电脑资源。
多线程编程
多线程编程最重要也是最核心的思想,就是把一个大的任务拆分成多个小任务,每个小任务占用一个线程。
这就要求拆分的小任务之间最好是资源(数据、内存等)独立的,如果资源不独立,线程之间有依赖,那么就需要有线程间的数据同步,会导致多线程效率下降,严重者出现性能回退。
我们所熟悉的 GPU, 其实就是一种多线程编程&#