第一章------c++并发世界

1:什么是并发

并发:两个或更过的独立活动同时发生

1.1 计算机系统中的并发

单个系统之同时执行多个独立的活动,而不是顺序的一个一个执行,对于单核处理器,在宏观上,计算机通过任务切换达到并发的效果,使人们感受不到切换延迟,是伪并行。对于多处理器或者多核心处理器,计算机可以并行运行多个任务,叫做硬件并发。

1.2 并发的两种途径

多个单线程的进程  多进程并发

缺点:速度慢,复杂

一个多线程的进程  多线程并发

进程中的线程共享相同的地址空间,线程的的开销小

2:为什么使用并发

分离和性能

2.1 什么是分离

代码测试时将各个功能分离单独观察功能的运行情况

2.2 什么是性能

herb sutter说过:免费的午餐结束了

之前笔者也看过这一篇文章的翻译,网上都能搜到,但是对内容不是很理解,现在才明白,“免费的午餐结束了“这句话的含义,对于单核处理器电脑,一个程序是在拥有一个核心的处理器上伪并行的,硬件的优劣影响了软件运行的速度,而且程序员不需要花费心思在硬件并发上,但是对于现在的多核心,多处理器电脑,程序员想要提高程序的性能就必须考虑硬件并发。也就是herb sutter 说的: 如果软件想要利用日益增长的计算机性能,它必须设计为并发运行多个任务。

为了性能而并发的两种方式

任务并行: 多个任务在不同处理器或者不同核心上同时执行,但是也带来依赖性问题

数据并行: 多个任务在不同的数据上执行相同的操作

易并行算法(embarrasingly parallel)

别的术语:自然并行(naturally parallel),便利并行(convenient parallel)

定义:随着可用硬件线程数量的提升,算法的并行性可以随之增加并匹配

2.3 什么时候不使用并发

  1. 收益比不上成本:复杂费脑子,
  2. 性能增益赶不上预期
  3. 线程总资源有限
  4. 过多的线程会引起计算机性能下降:上面的资源有限以及线程切换时进行的上下文切换

多线程星期一”,这又是什么行业黑话。。。。。。(好像是英语翻译的问题,multithreading monday, 学习多线程)

3:在c++中使用多线程和并发

资源获得即初始化(RALL, recourse acquisition is initialization)

3.1 c++11新标椎

抽象惩罚(abstraction penalty):使用高级工具的实现成本

3.2 第一程序 hello multithread

#include<iostream>
#include<thread>

using namespace std;

void hello() {
	cout << "hello concurrent world!" << endl;
}

int main() {
	thread t(hello);  //创建线程 线程执行hello函数
	t.join();         //调用线程等待, 避免t线程未执行而主线程执行结束
	return 0;
}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惜日短

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值