《我的第一本C++书》 用PLL进行多线程开发 2018/10/8

技术背景:

硬件的发展变成多核,而软件设计主要针对单一计算核心实现,由于架构的影响,软件并不能充分利用多个运算核心带来的性能提升。

解决方案:

利用多线程将应用程序并行化,充分利用CPU的多个运算核心。

什么时候需要使用多线程:

  • 程序中需要大量的运算,比如图像处理、三维建模等
  • 时间密集型或处理密集型的事务妨碍用户界面的相应
  • 单独的事务必须等待外部速度较慢的资源,例如打印任务需要等待答应机等

PLL是微软在Visual C++2010中提供的一种简化多线程应用程序开发的编程模型。PLL建立在并发运行时的调度和资源管理组件之上,在代码与底层线程机制之间插入一层抽象层,提供支持并发的泛化、类型安全的算法和并行容器。

特性:

  • 并行计算:并行作用于一组数据的泛化算法
  • 并行任务:一个可并行执行的几个工作单元(任务)的机制
  • 并行容器和对象:可安全的并发存取其元素的泛化容器

PLL三种常用的并行算法

  • 1.parallel_for算法
//标准forx循环
for(int i= 0;i<100;i++)
{
	//循环体
}
//并行的for循环
parallel_for(0,100,1,
		[&](int i)		//parallel_for()算法的LAmbda表达式
		{
			//循环体
		});

//接收4个参数,起始值、终止值、步长以及表示FOR循环体的Lambda表达式,
  • 2.parallel_for_each算法
vector<int> vec;
	parallel_for_each(vec_beigin(),vec.end(),
			[&](int& i)	//parallel_for_each()算法的LAmbda表达式
			{
				//对容器的数据进行处理
			}
	);

//接收3个参数,起始值、终止值以及表示FOR循环体的Lambda表达式,
  • 3.parallel_invoke()算法
//线程的创建和管理
//并行执行任务  可以接受2-10个函数对象作为参数,这些函数就是各个线程的线程函数,
parallel_invoke(
		[=]{
			for (int i = 0;i<100;i++)//任务1:输出0到100的整数
			{
				cout <<i <<endl;
			}
		},
		[=]{
			for(int i = 0;i<10;i++)
			{
				cout<<"   " <<i<<endl;
			}
		}
);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值