本博文由 youngpan1101 出品,转载请注明出处。
文章链接:https://blog.csdn.net/youngpan1101/article/details/102085704
作者: 宋洋鹏(youngpan1101)
邮箱: yangpeng_song@163.com
ps:该博文是《王健伟老师的:c++11多线程并发视频教程》的课后笔记。
并发
定义:两个或者更多的任务(独立的活动) 同时发生(进行),即一个程序同时执行多个独立的任务。
以往计算机是单核的,某一个时刻只能执行一个任务,主要是有操作系统负责调度,进行所谓的“任务切换”,这是并发的假象,这种上下文切换时需要时间开销的。
随着计算机硬件的发展,后面有了多核,能够实现真正意义上的并发,即可以并行执行多个任务,这也是为了满足日益增长的对计算机的性能要求。
进程
进程就是一个可执行程序的执行过程。
线程
每个进程都有一个主线程(唯一的),线程是用来执行代码的,可以理解成代码的执行通路。除了主线程之外,可以通过写代码来创建其他线程,即创建其他的通路。每多创建一个线程,意味着在同一时刻可以多执行一个任务。
线程并不是越多越好(线程数量建议不要超过200个,具体视项目情况而定),每个线程都需要一个独立的堆栈空间(1M),用于保存线程之间切换的中间状态,有时线程多反而会降低效率。
每个线程都有自己独立的运行路径,但是一个进程中的所有线程共享地址空间(共享内存)。全局变量、指针和引用都可以在线程之间传递,所以多线程的开销远远低于多进程,建议优先考虑多线程。
C++11新标准线程库
C++11新标准的语言本身增加了对多线程的支持,意味着跨平台的可移植性。