【C++并发实战】(一)并发基本概念
什么是并发
并发,最简单的理解就是,两个或者以上的活动同时进行。举个比较实际的例子,你可以手脚并用,两只手做不同的动作等等。
在计算机中的“并发”,是指一个系统可以同时执行多个独立的活动。在以前大多数计算机都只有一个处理单元(或者核心),这种计算机在同一时刻只能执行一个任务,任务只能一个一个的执行,但是这样的计算机可以通过任务的高速切换来产生“并发”的假象。
在现如今,拥有多个处理器的计算机已经遍地都是,这些计算机可以真真正正的在同一时刻执行多个独立的任务,这样的被称为“硬件并发”。
多进程并发
多进程并发是指,存在多个单线程的进程,将应用程序分为多个,比如想要实现同时播放音乐和播放影像,那么就分为两个进程,一个进程播放音乐,另一个进程播放影像。
但是这样有一个问题,比如你想要放一部电影,声音和影像应该同步才对(没人想看影音不同步的电影),那么两个进程之间为了实现播放电影就必须有所交流,那么就涉及到进程间通信,进程间的通信方式就不多说了,各种各样的通信方式也有满足不了需求的时候,比如同步复杂,速度慢造成延迟,更糟糕的是可能两者都有。
看到这里,可能会说速度很重要,多进程并发你可真是个小老弟。多进程并发存在的意义是什么?它的优点是什么?
多进程一个很大的优点就是进程间非常独立,除了通信之外基本不会互相影响,比如两进程跑着跑着,一个进程突然死了,另一个进程别提伤心了,连看都不看一眼就继续跑(可能比较极端,但是多进程的架构一个重要的角度就是安全),最有力的一个例子就是chrome浏览器,chrome浏览器采用多进程沙盒架构,为的就是当一个进程崩溃时不会影响主进程和其他进程。
多线程并发
并发的另一个途径是单个进程中运行多个线程,线程在很多书中都被称为“轻量级的进程”,每个线程可以相互独立运行,但是进程中的所有线程都享有共同的地址空间,并且线程间拥有不少共享数据(那么线程间同步和死锁之类的概念就引出来了)。
那么缺点就来了,线程间的同步并不简单,是挺复杂的一个事情,并且加锁之类的操作也有成本,会耗费一些资源
同时安全性问题也存在,比起多进程并发来说,多线程并发更像是四人三脚跑步,一个线程倒下了,其他三个可能也就完蛋了。
为什么要使用并发
为了性能而使用并发
在同一时刻干好几个任务,肯定比一个一个任务执行来的快。(这个说法其实并不准确,这里的意思是为了在硬件条件允许的情况下为了提高性能而使用并发,需要综合考虑)
为了划分关注点而使用并发
如果一场派对的举办都让一个人干,肯定会手忙脚乱,也不易于管理。任务也是一样,又是读文件又是网络请求啥的,就算计算机比人的头脑好一些,不会手忙脚乱,但是任务是要人来写和管理的。一大锅混在一起是很难进行管理的。
使用并发的一个目的就是为了将任务拆解,将关注点划分开。易于管理。
【C++并发实战】(一)并发基本概念的更多相关文章
- java 并发多线程 锁的分类概念介绍 多线程下篇(二)
接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...
- java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)
目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...
- java并发里的一些基础概念
转载自:https://my.oschina.net/hosee/blog/597934: 摘要: 本系列基于炼数成金课程,为了更好的学习,做了系列的记录. 本文主要介绍 1.高并发的概念,为以后系列 ...
- Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程
1 引言 并发.并行.串行.同步.异步.阻塞.非阻塞.进程.线程.协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念. 2 并发与并行 在解释并发与并行之前 ...
- 高并发第二弹:并发概念及内存模型(JMM)
高并发第二弹:并发概念及内存模型(JMM) 感谢 : 深入Java内存模型 http://www.importnew.com/10589.html, cpu缓存一致性 https://www.cnbl ...
- Netty Redis 亿级流量 高并发 实战 (长文 修正版)
目录 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -30[ 博客园 总入口 ] 写在前面 1.1. 快速的能力提升,巨大的应用价值 1.1.1. 飞速提升能力,并且满足实际开发要求 1 ...
- 聊聊QPS/TPS/并发量/系统吞吐量的概念
原文:聊聊QPS/TPS/并发量/系统吞吐量的概念 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/cainiao_user/article/deta ...
- 《Netty Zookeeper Redis 高并发实战》 图书简介
<Netty Zookeeper Redis 高并发实战> 图书简介 本书为 高并发社群 -- 疯狂创客圈 倾力编著, 高度剖析底层原理,深度解读面试难题 疯狂创客圈 Java 高并发[ ...
- 《Netty Redis Zookeeper 高并发实战》 勘误
<Netty Redis Zookeeper 高并发实战> 勘误与申明 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 勘误一 文字问题: Page1 J ...
随机推荐
- PHP性能优化四(业务逻辑中使用场景)
php脚本性能,很多时候依赖于你的php版本.你的web server环境和你的代码的复杂度. Hoare曾经说过“过早优化是一切不幸的根源”.当你想要让你的网站更快运转的时候,你才应该去做优化的事情 ...
- 敏感词过滤的算法原理之 Aho-Corasick 算法
参考文档 http://www.hankcs.com/program/algorithm/implementation-and-analysis-of-aho-corasick-algorithm-i ...
- python unittest框架理解与总结(二)
unittest基本原理: ♦整个平台的搭建使用的是python的unittest测试框架,这里简单介绍下unittest模块的简单应用. ♦unittest是python的标准测试库,相比于其他测试 ...
- PHP和javascript中url编码解码详解
在实际开发中,我们可能会遇到路径编码解码的问题,下面总结了一下: PHP中: 1.urlencode(编码),urldecode(解码) $a = urlencode('http://www.baid ...
- leetcode-77-组合
题目描述: 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], ...
- 线性表中顺序表的的理解和实现(java)
线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像.通常,称这种存储结构的线性表为顺序表.特点是:逻辑上相邻的数据元素,其物理次序上也 ...
- 用Yeoman构建AngularJS项目
转至https://yq.aliyun.com/articles/25578 Yeoman 介绍 Yeoman 是 Google 的团队和外部贡献者团队合作开发的,他的目标是通过 Grunt(一个用于 ...
- FileRecv VNCViewer 使用方法
版本 区别 一路点点点 . 就ok了 看到这个页面 点击 vnc viewer 输入 老师 会告诉你 IP地址 点击 就ok
- Mac 10.12安装WebStorm
下载: (链接: https://pan.baidu.com/s/1c2o8wUG 密码: 2waz)
- 【Vim】Vim学习
1. 三种模式 (1)命令模式:刚启动vim便进入命令模式,此时敲击键盘会被当做命令来处理 以下是常用的几个命令: i 切换到插入模式,以输入字符.x 删除当前光标所在处的字符.: 切换到底线命令模式 ...