C++并发编程笔记1: 认识并发编程
c++自版本11在语言层面引入多线程。
软并发 处理器中任务飞速切换,形成并发的假象。
硬件并发 多核多处理器。
单核单处理器上也可以实现多线程,多核多处理器也会实现任务切换。
并发的方式:
- 多进程并发:单进程单线程;
- 多线程并发:单进程多线程;
- 以上两种方式组合。
多进程并发
独立进程通过信号、套接字、文件、管道等进程间通信途径进行通信,缺点是:设置复杂、通讯效率低(源于系统的防护与隔离)。优点是:更安全(由于系统对进程的防护)、特殊编程环境效果一流(如Erlang)。
多线程并发
单一进程执行多线程,就像轻量级的多进程。
每个线程独立运行,各自执行不同的指令序列。
特点:
- 同一进程内线程公用地址空间,这在进程间通常很复杂。
- 全局变量对线程而言依然可见;
- 指针和引用可以在线程间传递;
并发与并行的区别
两者都是指使用可调配的硬件资源同时运行多个任务。
并发 关心分离关注点或响应能力;
并行 强调性能,关心利用可调配的硬件资源提升大规模数据处理的性能。
为什么要使用并发技术
- 分离关注点:归类相关代码,隔离无关代码,使得程序更易于理解和测试,减少缺陷;
- 提升性能:
A.将单一任务拆解多个任务,节省总运行时间;
B.同时对组数据执行相同的操作。
并发使用原则
- 考虑效益比,投入包含:开发、维护、资源消耗,收益包含:时间、性能;
- 考虑系统资源分配,线程占有独立的栈空间,运行越多,系统资源消耗越多;
- 过多的系统上下文切换可能会降低线程的性能;
- 是否复杂化,造成更多的复杂点。
发表回复