C++并发编程笔记1: 认识并发编程

c++自版本11在语言层面引入多线程。

软并发 处理器中任务飞速切换,形成并发的假象。
硬件并发 多核多处理器。

单核单处理器上也可以实现多线程,多核多处理器也会实现任务切换。

并发的方式:

  • 多进程并发:单进程单线程;
  • 多线程并发:单进程多线程;
  • 以上两种方式组合。

多进程并发
独立进程通过信号、套接字、文件、管道等进程间通信途径进行通信,缺点是:设置复杂、通讯效率低(源于系统的防护与隔离)。优点是:更安全(由于系统对进程的防护)、特殊编程环境效果一流(如Erlang)。

多线程并发
单一进程执行多线程,就像轻量级的多进程。

每个线程独立运行,各自执行不同的指令序列。

特点:

  • 同一进程内线程公用地址空间,这在进程间通常很复杂。
  • 全局变量对线程而言依然可见;
  • 指针和引用可以在线程间传递;

并发与并行的区别
两者都是指使用可调配的硬件资源同时运行多个任务。
并发 关心分离关注点或响应能力;
并行 强调性能,关心利用可调配的硬件资源提升大规模数据处理的性能。

为什么要使用并发技术

  1. 分离关注点:归类相关代码,隔离无关代码,使得程序更易于理解和测试,减少缺陷;
  2. 提升性能:
    A.将单一任务拆解多个任务,节省总运行时间;
    B.同时对组数据执行相同的操作。

并发使用原则

  1. 考虑效益比,投入包含:开发、维护、资源消耗,收益包含:时间、性能;
  2. 考虑系统资源分配,线程占有独立的栈空间,运行越多,系统资源消耗越多;
  3. 过多的系统上下文切换可能会降低线程的性能;
  4. 是否复杂化,造成更多的复杂点。

发表回复

您的电子邮箱地址不会被公开。