让C++程序更快的运行

视频由up神经元猫 神经元猫的个人空间_哔哩哔哩_bilibili 翻译自 youtube.com/cherno 并发布到👉 【79】【Cherno C++】【中字】如何让C++运行得更快_哔哩哔哩_bilibili 并由我整理。

  • 通过编码方式利用多核或多处理器 ,利用这些线程,不只是让你的程序顺序执行一条条指令,而是把一些东西,推迟到不同的线程,甚至不是推迟,二十把东西分派到不同的线程,让计算机更快地处理这些东西。

  • 每一个资源,每一个纹理模型,他们通常独立于彼此,意味着这是良好的多线程候选场景。

static std::mutex s_MeshesMutex;

static void LoadMesh(std::vector<Ref<Mesh>>* meshes, std::string filepath) {
    auto mesh = Mesh::Load(filepath);
    
    std::lock_guard<std::mutex> lock(s_MeshesMutex);
    meshes.push_back(mesh);
}

void EditLayer::LoadMeshes() {
    std::ifstream stream("src/Models.txt");
    std::string line;
    std::vector<std::string> meshFilepaths;
    while (std::getline(stream, line))
        meshFilepaths.push_back(line);
    
#define ASYNC 1
#id ASYNC
    for (const auto& file : meshFilepaths)
        // std::launch::async告知std库创建一个线程处理。
        // 我们需要保留std::async的返回值,如果不保留的话,因为它会被C++标准库摧毁,在摧毁时,标准库需要确保过程实际已被完成,这基本不是并行了,所以需要创建一个std::future的向量。
        m_Futures.push_back(std::async(std::launch::async, LoadMesh, &m_Meshes, file));
#else 
    for (const auto& file : meshFilepaths)
        m_Meshes.push_back(Mesh::Load(file));
}

std::vector<std::future<void> m_Meshes;

通过把任务分派的不同的线程,资源加载速度由6.3s,缩减到600ms,速度快了10倍。

End.