第一章 认识并发

为什么使用并发

主要原因有两个:

  1. 分离关注点。通过将相关的代码与无关的代码分离,可以使得程序更容易理解和测试。
  2. 性能。有两种方式提高性能,一是将单个任务分成几部分,各自并行运行从而降低总运行时间,一个线程执行算法的一部分,另一个线程执行另一部分,这叫任务并行;第二种是每个线程在不同的数据部分上执行相同的操作,称为数据并行。

什么时候不用并发

不使用并发的唯一原因就是收益比不上成本。使用并发的代码一般难以理解,所以编写和维护需要花大量时间;其次线程本身生成、启动、调度也都需要系统资源和时间,如果并发的收益弥补不了这些成本那还是算了。

入门

从一个普通单线程程序入手:

#include <iostream>
int main()
{
	std::cout << "Hello World" << std::endl;
	return 0;
}

改为多线程版:

#include <iostream>
#include <thread> //1
void print() //2
{
	std::cout << "Hello World" << std::endl;
}
int main()
{
	std::thread t(print); //3
	t.join(); //4
	return 0;
}

讲一下代码中的改动:

  1. 引入了新的头文件,管理线程的函数和类都在中声明,但是保护共享数据的函数和类在其他文件中声明;
  2. 每个线程都要有初始函数,就像一个程序的初始线程是main,刚开始就要从main执行。新线程的初始函数就是print,它第一次从print执行,在3处由thread对象的构造函数指定;
  3. 程序启动了一个全新的线程,将线程数量一分为二——main和print;
  4. 新线程启动后初始线程会自顾自的继续执行,有可能先于线程结束直接返回终止程序,join的作用在这体现。

这里就可以看出实现一个多线程比普通线程多做了大量工作,上面这个例子就满足之前讲的不用并发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值