【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 ...
随机推荐
- leetcode 198 打家劫舍 Python 动态规划
打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定 ...
- Centos7 自定义systemctl服务脚本
序言篇: 之前工作环境一直使用Centos6版本,脚本一直在使用/etc/init.d/xxx:系统升级到Cento7后,虽然之前的启动脚本也可以使用,但一直没有使用systemctl 的自定义脚本. ...
- python中的字符串和编码
了解编码之前首先说下这几个词的概率: 位.字节.字符.字符串 1.位(bit)也称为比特 这个其实很简单,因为计算机都是二进制存储数据,也就是0和1,一个0或者1就表示一位.这是计算机存储的最小单位. ...
- C#-类-string/Manth/Random/DateTime-及练习
类一.string类:.Length 字符串的长度 .Trim() 去掉开头以及结尾的空格.TrimStart() 去掉开头的空格.TrimEnd() 去掉结尾的空格 .ToLower() 全部转换为 ...
- Welcome! This is the documentation for Python 3.6.8
The Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Simp ...
- Java NIO学习与记录(七): Reactor单线程模型的实现
Reactor单线程模型的实现 一.Selector&Channel 写这个模型需要提前了解Selector以及Channel,之前记录过FileChannel,除此之外还有以下几种Chann ...
- Java线程池的选择
在java的concurrent.Executors主要提供两种线程池:无固定线程数但有限制任务队列的cachedThreadPool与有固定线程数但无任务队列限制的fixedThreadPool,这 ...
- 开源一个C# Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- JVectorMap地图插件.Net版开源
jVectorMap地图插件只要浏览器技术JavaScript.CSS,HTML,SVG或VML就可以浏览使用,不需要Flash或其他专有的浏览 器插件.所以jVectorMap在所有现代移动浏览器上 ...
- (转)mysql双机热备的实现
mysql双机热备的实现 原文:http://www.zjian.me/web/php/mysql%E5%8F%8C%E6%9C%BA%E7%83%AD%E5%A4%87%E7%9A%84%E5%AE ...