c++11 多线程 1<<c++ concurrency in action>>

本文深入探讨了计算机并行技术的两种主要方式:任务切换与多处理器多核,并详细介绍了C++中使用线程作为并行单位的优势。文章进一步阐述了使用并行技术的原因,即提供自然的思考方式和提高性能,并讨论了不使用并行技术的情况。此外,文章还特别强调了C++标准线程库的效率,对比了直接使用底层API和高阶接口带来的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、并行、多线程

1、计算机中的并行有两种方式:任务切换、利用多处理器多核。

纯粹的任务切换:

 

纯粹的多处理器多核:

 

任务切换与多处理器多核结合:

 

实际应用中是“任务切换与多处理器多核结合”方式,首先现在硬件偏移单处理器单核淘汰“纯粹的任务切换”已不在,“纯粹的多处理器多核”每个核分配一个进程(线程),进程(线程)数目收到严格限制。

2、编程所用的并行单位:将任务分解为进程或线程

 

优点

缺点

进程(线程)间通信方式

C++标准支持

 

进程

系统对它的安全进行部分管制;可以利用网络通信;通信少了很简单(属于高层接口)

通信多了就复杂、慢、甚至不可能,因为系统对进程间通信的安全部分管制;进程间切换慢

Signals/sockets/files/pipes

线程

同一个进程的所有线程共享同一地址空间,通信简单、灵活;线程间切换迅速

数据的安全难保证

共享地址空间

C++使用的并行单位是线程。

二、为什么使用并行?

1、提供一种自然的思考方式,简化设计;

2、提高性能,可以task parallelism(将应用分解为任务)、data parallelism(将数据分解为不同的部分);

三、什么时候不使用并行?

利大于弊。利:一种自然的思考方式、性能;弊:编程复杂、线程切换费时。

四、c++标准线程库的效率:

很多要求高性能的程序员在使用c++时候都担心abstraction penaltyc++标准委员在设计标准库的时候考虑到了这个,尤其是线程库,他们承诺:there should be little or no benefit to be gained from using the lower-level APIs directly提供两种接口low-levelhigh-levellow-level在新的内存模型上提供原子操纵库,这些原子操作甚至可以替代以前要用基于平台的汇编写的程序。High-level接口并没有太多的abstraction penalty标准库承诺它的功能跟你自己手写函数调用Low-level接口效率一样,并且进行了很好的内联。High-level可能包含一些函数你不需要,但是千万别自己去用low-level去实现,得不偿失,在使用STL的一个被证实的事实是:瓶颈在于你的应用程序的设计而不是库的实现。

 

例子很简单,不解释了。

转载于:https://www.cnblogs.com/jiafenggang/p/5482533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值