【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 ...
随机推荐
- [JS] 气球放气效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- 【FAQ】tomcat启动jdk版本不一致
一.tomcat7.exe与startup.bat的区别: 1.这两个都可以启动tomcat,但tomcat7.exe必须安装了服务才能启动,而startup.bat不需要 2.另外一个区别是它们启动 ...
- [转] 检查更新时出错:无法启动更新检查(错误代码为 4: 0x80070005 — system level)
Google浏览器Chrome更新到时候提示错误:检查更新时出错:无法启动更新检查(错误代码为 4: 0x80070005 -- system level),很有可能是Chrome更新服务被禁用了,我 ...
- Android脚本打包
最近项目中需要添加应用渠道,我使用的是友盟统计,对于不同渠道需要编译不同版本,对于开发者说编译一次,手动操作还是可以接受的,但是项目发布版本频率较高,而且渠道很多,这就是一个体力活,而且手动打包还比较 ...
- mysql 查询小技巧
数据字段中存放的是id集,形如 1,2,15,35 也可类推json格式 查询时不用拆分了, 用上 instr.concat搜索和连接字符串 查询fids中包含15的 select * from ...
- day4. python学习之字典
字典和列表是最常用的数据类型,字典是一种key-value的数据类型,用{ }表示 1.字典的特性:无序的,没有下标 2.字典的使用:增删改查 info = { '20181101':"zh ...
- SVN版本库备份和恢复
1.版本库备份 1.1.svnadmin dump方式备份 此方法借助的是Subversion官网推荐的svnadmin dump备份方式,它的优点是比较灵活,既可以进行全量备份又可以进行增量备份,并 ...
- Django中的Session--实现登录
Django中的Session--实现登录 Django Session Session Session 是什么 Session保存在服务端的键值对. 为什么要有 Session Cookie 虽然 ...
- Java学习之路(七):泛型
泛型的概述和基本使用 作用:把类型明确的工作推前到创建对象或者调用方法的时候 泛型是一种参数化类型,把类型当做参数一样传递来明确集合的元素类型 泛型的好处 提高安全性 省去强转的麻烦 泛型的基本使用 ...
- redis的 list
redis的list是一个双向链表,既可以用作栈,也可以用作队列,幸好大学学过数据结构,还有印象. 栈:先进后出,队列:先进先出 redis链表操作: 应用场景学习list链表:要获取最新的10个登录 ...