C++11并发与多线程【第一节】并发,进程,线程的基本概念和综述

一:并发,进程,线程的基本概念和综述

1.1 并发

以往的计算机(单核CPU):某一时刻只能执行一个任务,由操作系统调度,每秒钟执行多次所谓的“任务切换”,造成并发的假象(非真正的并发),这种切换(上下文切换)是要有时间开销的。

并发(Concurrence):两个或多个事件在同一时间间隔内发生。操作系统的并发性指的是计算机系统中同时存在多个运行的程序,因此它具有处理和调度多个程序同时执行的能力。

操作系统中引入程序的目的是使程序能并发执行。

同一时间间隔:并发·

同一时刻:并行。并行性是指系统具有同时进行运算或操作的特性,在同一时刻能完成两种或两种以上的工作。并行性一般需要相关硬件的支持。

多道程序环境下,一段时间内,宏观上有多道程序在同时进行,而在每个时刻,单处理机环境下实际仅能有一道程序执行,因此微观上这些程序仍是分时交替执行的。操作系统的并发性是通过分时得以实现的。

举例:

9:00-9:30吃面,9:30:-9:40上厕所,9:40-10:00看书

则在9:00-10:00这个时间段内,吃面,上厕所,看书这三种行为就是并发执行的。

若在9:00或某个时刻,左手吃面,右手写字,则这两个行为就是并行执行的。

1.2 可执行程序

1.3 进程

程序的一次执行。

1.4 线程

- 每个进程都有一个主线程,这个主线程是唯一的。 进程产生后,这个主线程就随之产生了。
- 程序运行时,实际上时进程的主线程来执行这个main函数中的代码。
- 主线程执行完main函数中return后,表示整个进程运行完毕,主线程也运行完毕。

线程是代码的一条执行通路。

线程不是越多越好,每个线程都需要一个独立的堆栈空间,线程之间的切换要保存很多中间状态,会耗费用于程序运行的时间。

二:并发的实现方法

实现并发的手段:
1.多个进程并发
2.单进程中创建多个线程实现并发

2.1 多进程并发

进程之间的通信(同一电脑):管道,文件,消息队列,共享内存;
(不同电脑):socket通信技术;

2.2 多线程并发

线程是轻量级的线程,每个线程都有自己的运行路径,一个进程中的所有线程共享该进程的地址空间(共享内存)。
因此全局变量,指针,引用都可以在线程之间传递,所以多线程的开销远小于多进程。
共享内存的问题:数据一致性问题;

2.3 总结

和进程相比,线程具有以下优点:
(1)线程启动速度更快,更轻量级;
(2)系统资源开销更少,执行速度更快;

缺点:难度大,数据一致性问题;

三:C++新标准线程库

C++11之前的多线程代码不能跨平台,从C++11开始,C++语言本身增加对多线程的支持,即增加了跨平台的可移植性。

文章内容来源《C++并发与多线程视频课程》

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信