第1章 你好并发世界

第1章 你好并发世界

什么是并发?在单核时代想要运行多个任务同时运行,实际上每刻只有一个任务在运行,其他则要进行等待。但是多核心下,有多个核心可以分别运行不同的任务,则即使同一个任务也可以在不同的核心之间切换,尽可能地让任务等待的时间变得更少。所有的代码实例都将在ubuntu下g++编译器下编译运行。

并发的方式

为什么使用并发

什么时候不使用并发

收益比不上成本、代码开发与维护成本。

线程资源有限、线程不能无限分配,每个线程都需要自己堆栈。

客户端服务端,如果为每个链接启动一个独立的线程,请求过多时会造成消耗过大,通常采用线程池方案解决

线程越多、操作系统就需要越多的上下文切换,每一次切换都需要耗费时间,如果要得到系统的最佳性能,要以考虑硬件并发,调整运行线程的数量。

C++11标准就有了std::thread,有一套标准库的线程操作接口,这使得代码跨平台能力进一步提高,所以我们直接从C++11并发学起,学起C++的新特性,而不是沉浸在pthread的函数中,先使用C++11理解并发程序,在实际学习中再对Unix环境的并发针对性学习,而不是一上来就学函数式的接口,内容繁杂很容易劝退

第一个并发程序

#include <iostream>
#include <thread>

//线程任务入口函数
void hello()
{
    std::cout << "Hello Concurrent World" << std::endl;
}

int main(int argc, char **argv)
{
    std::thread t(hello); //开启新的线程
    t.join();             //等待线程t的结束
    return 0;
}
//程序输出 Hello Concurrent World

如何编译,本质上还是用了pthread库,但是c++从c++11标准支持了相应的接口,也就是为多平台的代码同意做了有效的工作。

g++ example1.cpp -o example1.exe -std=c++11 -lpthread  && ./example1.exe