C++11一个最重要的新特性就是对多线程的支持。

C++标准第一次承认多线程在语言中的存在,并在标准库中为多线程 提供组件。意味着使用C++编写与平台无关的多线程程序成为可能,也为可能移植性提供了强有力的保证。与此同时,程序员为提高应用的性能,对并发的关注也是与日剧增,特别是在多线程编程方面。

何谓并发

最简单和最基本的并发,是指两个或更多独立的活动同时发生。

并发在生活中随处可见,我们可以一边走路一边说话,也可以两只手同时做不同的动作,还有我们每个人都过着相互独立的生活 ——当我在游泳的时候,你可以看球赛,等等。

计算机系统中的并发

  计算机领域的并发指的是在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。计算机领域里,并发不是一个新事物:很多年前,一台计算机就能通过多任务操作系统的切换功能,同时运行多个应用程序;高端多处理器服务器在很早就已经实现了真正的并行计算。那“老东西”上有哪些“新东西”能让它在计算机领域越来越流行呢?——真正任务并行,而非一种错觉。

  以前,大多数计算机只有一个处理器,具有单个处理单元(processing unit)或核心(core),如今还有很多这样的台式机。这种机器只能在某一时刻执行一个任务,不过它可以每秒进行多次任务切换。通过“这个任务做一会,再切换到别的任务,再做一会儿”的方式,让任务看起来是并行执行的。这种方式称为“任务切换(task switching)”。如今,我们仍然将这样的系统称为并发(concurrency):因为任务切换得太快,以至于无法感觉到任务在何时会被暂时挂起,而切换到另一个任务。任务切换会给用户和应用程序造成一种“并发的假象”。因为这种假象,当应用在任务切换的环境下和真正并发环境下执行相比,行为还是有着微妙的不同。特别是对内存模型不正确的假设(详见第5章),在多线程环境中可能不会出现(详见第10章)。

入到缓存中,这会阻止CPU执行任何指令,从而造成的更多的延迟。

并发编程基础概念

的问题。

并发编程基础概念

1.1.2 并发的途径

能存在资源共享的问题(比如,“参考手册哪去了?”)

在一个应用程序中简单的分析一下这两种途径。

多进程并发

作系统需要内部资源来管理进程,等等。

这可能是一个提高并行可用行和性能的低成本方式。

并发编程基础概念

多线程并发

线程通过共享内存进行通信。

并发编程基础概念

地址空间共享,以及缺少线程间数据的保护,使得操作系统的记录工作量减小,所以使用多线程相关的开销远远小于使用多个进程。不过,共享内存的灵活性是有代价的:如果数据要被多个线程访问,那么程序员必须确保每个线程所访问到的数据是一致的,线程间数据共享可能会遇到的问题,以及如何使用工具来避免这些问题)。问依赖与平台相关的API。

摘抄《C++并发编程实战》

相关文章: