1.1 何谓并发

并发的两种方式

  1. 多核机器上的真正并行
  2. 单核机器的任务切换

并发的两种途径

  1. 多进程并发

    1.1 多进程并发需要通过操作系统进行进程间通信
  2. 多线程并发

    2.1 多线程并发需要共享内存

1.2 为什么使用并发

主要原因有两个:关注点分离(SOC)和性能

为了分离关注点

通过将相关的代码与无关的代码分离.

比如:

实现DVD播放程序,分开用户界面和DVD播放

为了性能

两种方式利用并发提高性能:

  1. 将一个单个任务分成几个部分,切各自并行运行,从而降低总运行时间,这就是任务并行(task parallelism)
  2. 每个线程在不同的数据部分执行相同的操作,也就是数据并行(data parallelism)

什么时候不使用并发

不使用并发的唯一原因就是,收益比不上成本

1.4 开始入门

1.4.1Hello Concurrent World

清单 1.1 一个简单的Hello, Concurrent World程序:

#include <iostream>
#include <thread> //①
void hello() //②
{
std::cout << "Hello Concurrent World\n";
} int main()
{
std::thread t(hello); //③
t.join(); //④
}
  1. 头文件#include<thread>
  2. 多线程初始化函数hello
  3. 初始化多线程t
  4. 调用join()

1-C++的并发世界的更多相关文章

  1. 《C++ 并发编程》- 第1章 你好,C++的并发世界

    <C++ 并发编程>- 第1章 你好,C++的并发世界 转载自并发编程网 – ifeve.com 本文是<C++ 并发编程>的第一章,感谢人民邮电出版社授权并发编程网发表此文, ...

  2. 第1章 你好,C++并发世界

    #include<iostream> #include<thread> void print(){ std::cout << "hello world&q ...

  3. Atitit.并发编程原理与概论 attilax总结

    Atitit.并发编程原理与概论 attilax总结 1. 并发一般涉及如下几个方面:2 2. 线程安全性 ( 2.2 原子性 2.3 加锁机制2 2.1. 线程封闭3.3.1Ad-hoc线程封闭 3 ...

  4. c++11并发程序设计(1)

    第一章:你好 c++的并发世界 1.何为并发 最简单和最基本的并发,是指两个或两个以上的独立活动同时进行. 对于单个处理单元或者核心,这种机器只能在某一时刻执行一个任务,不够它可以每秒进行多次的任务切 ...

  5. 【转】Java并发的AQS原理详解

    申明:此篇文章转载自:https://juejin.im/post/5c11d6376fb9a049e82b6253写的真的很棒,感谢老钱的分享. 打通 Java 任督二脉 —— 并发数据结构的基石 ...

  6. C++并发编程实战

    第1章 你好,C++并发世界 第2章 管理线程 第3章 在线程间数据共享 第4章 同步并发操作 第5章 C++内存模型和原子类型操作 第6章 设计基于锁的并发数据结构 第7章 设计无锁的并发数据结构 ...

  7. java高并发核心要点|系列1|开篇

    在java高并发编程,有几个很重要的内容: 1.CAS算法 2.CPU重排序 3.缓存行伪共享 我们先来说说高并发世界中的主要关键问题是什么? 是数据共享. 因为多线程之间要共享数据,就会遇到各种问题 ...

  8. 【漫画】JAVA并发编程之并发模拟工具

    原创声明:本文来源于公众号[胖滚猪学编程],转载请注明出处. 上一节[漫画]JAVA并发编程三大Bug源头(可见性.原子性.有序性)我们聊了聊并发编程的三个bug源头,这还没开始进入并发世界,胖滚猪就 ...

  9. 大神为你分析 Go、Java、C 等主流编程语言(Go可以替代Java,而且最小化程序员的工作量,学习比较容易)

    本文主要分析 C.C++98.C++11.Java 与 Go,主要论述语言的关键能力.在论述的过程中会结合华为各语言编程专家和华为电信软件内部的骨干开发人员的交流,摒弃语言偏好或者语言教派之争,尽量以 ...

随机推荐

  1. scikit_learn,NLTK导入分类器相关流程命令

  2. python3作业:模拟登录

    __author__ = "bin007" customer = {}#存储用户信息#处理用户信息文件try: with open('login.txt','r',encoding ...

  3. 跨DB Server创建View

    exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'Ad Hoc Distributed Queries' ...

  4. webapp优化

    1. 优化前提: 业务架构与数据库设计 2.  单页web应用  : ExtJs  backbone  ng  avalon 框架: React Native    , ionic  , Mui, m ...

  5. hibernate session.createSQLQuery(sql); 通过命令删除

    @Override public boolean deleteBySql(String sql) { Session session = getSession(); @SuppressWarnings ...

  6. Unity3D-RayMarch-几何图元-3添加阴影

    效果图: 在RayMarch渲染算法中计算阴影非常简单,当射线碰撞到物体,从碰撞点逆着光源方向再次执行射线步进算法,如果这一过程中碰撞到了其他物体,则碰撞点被其他物体遮挡,该处具有阴影. shader ...

  7. Connection failed Flowsocketconnector Failed to connect to target addressWindows error10061:由于目标计算机积极拒绝,无法连接

    使用bitbise时报上面错误   : 解决方法 :卸载软件并删除相关的文件 (包含bitvise 及注册表中的文件)重新安装后能连接

  8. odoo8 元素简介

    一:模型module: 1. 字段类型 (1)可控字段: fileds.char() fileds.Boolean() fileds.Date() (2)保留字段:(系统自动生成) id (Id) t ...

  9. eclipse配置逆向工程

    eclipse单行注释:ctrl + shfit + c   或者   Ctrl+/:    添加//注释 快速查找某个类:Ctrl+Shift +T   查找这个类的子类是ctrl+t eclips ...

  10. tensorflow 源码编译

    https://blog.csdn.net/xsfl1234/article/details/67669707 https://blog.csdn.net/guxi123/article/detail ...