1. 什么是并发和多线程

2. 为什么要使用并发和多线程

2011年发布的C++11开始支持多线程程序。并在库中为编写多线程应用程序提供组件,这使得在不依赖平台相关扩展编写多线程程序成为可能。

首先介绍,什么是并发?

从简单和基本的层面讲,并发是指两个或者更多独立的活动同时发生,那么计算机系统中的并发的定义是什么?
计算机系统中的并发指的是:单个系统里同时执行多个独立的活动,而不是顺序地或者一个接一个的。以前,大多数计算机只有一个处理器,,具有单个处理单元或者核心。在每一时刻只能执行一个任务,但是可以在不同的任务之间进行快速切换。看起来像是并发,但这实际上是一种“伪并发”。可以详细介绍一下这种切换。处理器每次在任务之间进行交替切换吗,都要执行一次上下文切换动作。为了执行上下文切换,操作系统必须为当前运行的任务保存CPU的状态和指令指针,算出要切换到哪个任务,并为要切换到的任务重新加载处理器状态。

现在,具有多个处理器,或者单个多核处理器的计算机,每个处理器或者每个核心都能够执行一个任务,是能够实现正真的并发。我们称之为“硬件并发”。

现在,有些处理器可以在一个核心上执行多个线程,要考虑的是硬件线程的数量,即硬件可以真正并发运行多少个独立的任务,即便在正真正具有硬件变并发的系统上,也很容易有超过硬件并发数量的任务要执行,所以在这种情况下,任务切换任然将被使用。

1. 多进程并发

这种方法是将应用程序分为多个独立的,单线程的进程,他们运行在同一时刻。这些独立的进程之间可以进行相互之间的通信。(所有常规的进程间的通信渠道,信号,套接字,文件,管道),如下图所示:

多进程并发的缺点:
1. 进程之间的通信设置较为复杂,且通信速度较慢。(因为操作系统通常会在进程之间提供大量的保护,以避免一个进程不小心修改了属于另一个进程的数据)。

2.运行多个进程需要一定的,固有的开销

3. 启动进程需要时间,而且操作系统需要投入内部资源来管理进程。

多线程并发的优点:

1. 上述的第一条缺点,从另一个方向看,也可以是优点,因为操作系统在进程之间提供的附加保护操作和更高级别的通信机制,所以可以更加容易的编写安全的并发代码。

2. 通过独立的进程实现并发,可以通过网络链接到不同机器上独立运行的进程,虽然增加了通信成本,但是在一个精心设计的系统上,它可能是一个提高并行可用性和提高性能的低成本方法。

2. 多线程并发

并发的另一个途径是在单个进程中运行多个线程,线程很像轻量级的进程:因为每一个线程可以独立运行不同的指令序列。但是进程之间的所有线程都共享相同的地址空间,并且从所有线程中访问到大部分数据。两个线程之间通过共享内存进行通信的方式如下图所示:

多线程并发的优点:
1. 共享的内存空间,以及缺少进程间的数据保护。使得多线程并发的开销远远低于多进程。因为操作系统要做的薄记更少。

多线程并发的缺点:

1. 上述的优点1,也会带来一些问题,共享内存虽然灵活性更高,但是也需要付出代价。如果数据被多个线程访问,那么必须保证每个线程访问时看到的数据是一致的,否则线程之间的数据共享可能会遇到问题。但是这些是可以克服的。

相比于启动多个单线程的进程并在期间进行通信,启动单一进程中的多个线程的并在其间进行通信的开销更低。此外,c++标准并没有为进程之间的通信提供任何原生的支持,所以使用多进程的应用程序必须依赖平台相关的API来实现。

为什么使用并发:

1. 关注点分离

2.提高i性能

1. 为了划分关注点而使用并发

在编写软件的时候,划分关注点是一个好主意,将相关的代码放在一起并将无关的代码分开,可是使得程序更加易于理解和测试,从而减少出错的可能性。

例如,对于一台DVD播放设备:

2.为了性能而采用并发
主要有两种实现方式:

1  . 任务并发

将一个单个任务分解成几部分为能, 然后各自并行运行,从而降低总运行时间

2.  数据并发

每个线程在不同的数据部分上执行相同的操作。

C++并发编程 (1) 基本知识相关推荐

  1. 学习笔记:Java 并发编程①_基础知识入门

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...

  2. Java Review - 并发编程_前置知识二

    文章目录 What's 多线程并发编程 线程安全问题 共享变量的内存可见性问题 synchronized synchronized的内存语义 volatile - 解决内存可见性 一般在什么时候才使用 ...

  3. 并发编程——线程——理论知识

    一.什么是线程 线程是操作系统能够进行运算调度的最小单位. 它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任 ...

  4. 并发编程——进程——理论知识

    一.什么是进程 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程. 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资 ...

  5. Java并发编程笔记—基础知识—实用案例

    如何正确停止一个线程 1)共享变量的使用 中断线程最好的,最受推荐的方式是,使用共享变量(shared variable)发出信号,告诉线程必须停止正在运行的任务.线程必须周期性的核查这一变量(尤其在 ...

  6. 并发编程不是少数派技能,每个程序员都要尝试掌握

    题图 | <七周七并发编程>封面图案 新手程序员一般会对并发编程和多线程编程避而远之,因为它们会让本来好好的代码以最可怕的方式运行,而且竞争条件等各类问题会引发严重的崩溃,要么是在生产环境 ...

  7. 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

    许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...

  8. tomcat 参数最佳实践_一线架构师开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL...

    每一个程序员都有自己清晰的职业规划和终极目标,无论之后是继续钻研技术,还是转管理岗.产品岗,都是需要自己具备有一定的实力,换句话说技术要牛逼.架构师,是很多程序员的终极目标,而成为一名Java架构师, ...

  9. java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! ​ 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...

  10. 《Java并发编程的艺术》——线程(笔记)

    文章目录 四.Java并发编程基础 4.1 线程简介 4.1.1 什么是线程 4.1.2 为什么要使用多线程 4.1.3 线程优先级 4.1.4 线程的状态 4.1.5 Daemon线程 4.2 启动 ...

最新文章

  1. OPPO Find X3通过网站推广正式官宣,打破常规探索高端旗舰新突破!
  2. 为什么unity 安装完模块还是找不到sdk_解决在Android Studio 3.2找不到Android Device Monitor工具...
  3. SDOI 2017R2游记
  4. (40)System Verilog随机函数$random示例
  5. 黄峥辞任董事长,超级投票权失效!拼多多已成为中国电商第一
  6. matlab机器人轨迹规划仿真程序,基于MATLAB的六自由度机器人轨迹规划与仿真.pdf...
  7. mysql ---- 约束
  8. 【转载+思考】追问泄题之源:命题权寻租打开方便之门
  9. 如何使用计算机管理来为硬盘分区,电脑如何硬盘分区合理_电脑硬盘分区的基本步骤-win7之家...
  10. matlab %%?
  11. 用matlab求众数,Matlab求方差,均值,均方差,协方差的函数
  12. linux memery dump
  13. 【课程】03 Richards方程数值解
  14. 7-4 输出两行短句 (10分)
  15. 冲激函数与冲激函数相乘与冲激函数对冲激函数卷积之间的区别
  16. 【C语言程序设计】实验 11
  17. 计算机信息安全及保密,计算机信息安全与保密.ppt
  18. enq 命令的帮助.
  19. git——合并分支commit记录 squash提交
  20. 替代RTD2171U|CS5266设计电路|TYPEC转HDMI方案|CS5266AN

热门文章

  1. springcloud工作笔记096---springboot集成多线程_高并发_集成线程池的使用
  2. springcloud工作笔记091---tk.mybatis.mapper.MapperException: 当前实体类不包含名为XXXXX的属性!
  3. 杭电2100Lovekey
  4. 杭电2094产生冠军
  5. java 整型变量,Java 整型变量
  6. win python_winpython是什么
  7. ftk学习记(list篇)
  8. dom渲染完毕再渲染数据_在vue组件中,异步手动渲染dom
  9. vue安装jsencrypt_vue使用JSEncrypt实现rsa加密及挂载方法
  10. php mysql 简单留言板_php+mysql 最简单的留言板_PHP教程