什么是并发

并发,最简单的理解就是,两个或者以上的活动同时进行。举个比较实际的例子,你可以手脚并用,两只手做不同的动作等等。

在计算机中的“并发”,是指一个系统可以同时执行多个独立的活动。在以前大多数计算机都只有一个处理单元(或者核心),这种计算机在同一时刻只能执行一个任务,任务只能一个一个的执行,但是这样的计算机可以通过任务的高速切换来产生“并发”的假象。

在现如今,拥有多个处理器的计算机已经遍地都是,这些计算机可以真真正正的在同一时刻执行多个独立的任务,这样的被称为“硬件并发”。

多进程并发

多进程并发是指,存在多个单线程的进程,将应用程序分为多个,比如想要实现同时播放音乐和播放影像,那么就分为两个进程,一个进程播放音乐,另一个进程播放影像。

但是这样有一个问题,比如你想要放一部电影,声音和影像应该同步才对(没人想看影音不同步的电影),那么两个进程之间为了实现播放电影就必须有所交流,那么就涉及到进程间通信,进程间的通信方式就不多说了,各种各样的通信方式也有满足不了需求的时候,比如同步复杂,速度慢造成延迟,更糟糕的是可能两者都有。

看到这里,可能会说速度很重要,多进程并发你可真是个小老弟。多进程并发存在的意义是什么?它的优点是什么?

多进程一个很大的优点就是进程间非常独立,除了通信之外基本不会互相影响,比如两进程跑着跑着,一个进程突然死了,另一个进程别提伤心了,连看都不看一眼就继续跑(可能比较极端,但是多进程的架构一个重要的角度就是安全),最有力的一个例子就是chrome浏览器,chrome浏览器采用多进程沙盒架构,为的就是当一个进程崩溃时不会影响主进程和其他进程。

多线程并发

并发的另一个途径是单个进程中运行多个线程,线程在很多书中都被称为“轻量级的进程”,每个线程可以相互独立运行,但是进程中的所有线程都享有共同的地址空间,并且线程间拥有不少共享数据(那么线程间同步和死锁之类的概念就引出来了)。

那么缺点就来了,线程间的同步并不简单,是挺复杂的一个事情,并且加锁之类的操作也有成本,会耗费一些资源

同时安全性问题也存在,比起多进程并发来说,多线程并发更像是四人三脚跑步,一个线程倒下了,其他三个可能也就完蛋了。

为什么要使用并发

为了性能而使用并发

在同一时刻干好几个任务,肯定比一个一个任务执行来的快。(这个说法其实并不准确,这里的意思是为了在硬件条件允许的情况下为了提高性能而使用并发,需要综合考虑)

为了划分关注点而使用并发

如果一场派对的举办都让一个人干,肯定会手忙脚乱,也不易于管理。任务也是一样,又是读文件又是网络请求啥的,就算计算机比人的头脑好一些,不会手忙脚乱,但是任务是要人来写和管理的。一大锅混在一起是很难进行管理的。

使用并发的一个目的就是为了将任务拆解,将关注点划分开。易于管理。

【C++并发实战】(一)并发基本概念的更多相关文章

  1. java 并发多线程 锁的分类概念介绍 多线程下篇(二)

    接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...

  2. java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)

    目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...

  3. java并发里的一些基础概念

    转载自:https://my.oschina.net/hosee/blog/597934: 摘要: 本系列基于炼数成金课程,为了更好的学习,做了系列的记录. 本文主要介绍 1.高并发的概念,为以后系列 ...

  4. Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程

    1 引言 并发.并行.串行.同步.异步.阻塞.非阻塞.进程.线程.协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念. 2 并发与并行 在解释并发与并行之前 ...

  5. 高并发第二弹:并发概念及内存模型(JMM)

    高并发第二弹:并发概念及内存模型(JMM) 感谢 : 深入Java内存模型 http://www.importnew.com/10589.html, cpu缓存一致性 https://www.cnbl ...

  6. Netty Redis 亿级流量 高并发 实战 (长文 修正版)

    目录 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -30[ 博客园 总入口 ] 写在前面 1.1. 快速的能力提升,巨大的应用价值 1.1.1. 飞速提升能力,并且满足实际开发要求 1 ...

  7. 聊聊QPS/TPS/并发量/系统吞吐量的概念

    原文:聊聊QPS/TPS/并发量/系统吞吐量的概念 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/cainiao_user/article/deta ...

  8. 《Netty Zookeeper Redis 高并发实战》 图书简介

    <Netty Zookeeper Redis 高并发实战> 图书简介 本书为 高并发社群 -- 疯狂创客圈 倾力编著, 高度剖析底层原理,深度解读面试难题 疯狂创客圈 Java 高并发[ ...

  9. 《Netty Redis Zookeeper 高并发实战》 勘误

    <Netty Redis Zookeeper 高并发实战> 勘误与申明 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 勘误一 文字问题: Page1 J ...

随机推荐

  1. vue + ElementUI 表格筛选框的高度设置,超出一定高度,显示滚动条

    相信有很多小伙伴遇到过这个问题,首先还是来看图片,筛选框我做了处理,所以和官网的有点小差别 官方网站和个人网站对比图如下: 代码如下:(F12找到该元素的class,设置高度) .el-table-f ...

  2. JavaScript创建对象的4种方法

    我们有很多种方式去构造一个对象.可以构造一个对象字面量,也可以和new前缀连用去调用一个构造器函数,或者可以使用Object.create方法去构造一个已经存在的对象的新实例,还可以调用任意一个会返回 ...

  3. 分析解决Java运行时异常

            1 ,基础知识    http://my.oschina.net/u/140462/blog/421128    JVM运行时内存结构          2 ,相关命令    http ...

  4. 火狐浏览器下,td 直接使用position:relative;和background:;产生的边框消失问题

    消失示例: td{ width:40px; height:28px; position:relative; background:#ccc; } 出现问题 问题原因: 我的理解是各个浏览器之间对于ba ...

  5. 核心API的使用(获取两个字符串的最大相同子串)

    /** * 获取两个字符串的最大相同子串. 例:abegad acegab */public class TheSameString { public static void main(String[ ...

  6. hive一些基本用法

    1.hive中的数据库表的类型有两种,一种是managed,一种是external  :managed表类型是指传入的数据放在hive默认的储存位置下,而external 表类型可以将数据 放在任意的 ...

  7. Luogu P1351 联合权值 题解

    这是一个不错的树形结构的题,由于本蒟蒻不会推什么神奇的公式其实是懒得推...,所以很愉快的发现其实只需要两个点之间的关系为祖父和儿子.或者是兄弟即可. 然后问题就变得很简单了,只需要做一个正常的DFS ...

  8. Mysql备份之Innobakcupex&Xtrabackup

                       一.innobackupex备份工具 基本选项 --compress:该选项表示压缩innodb数据文件的备份. --compress-threads:该选项表示 ...

  9. 本地docker镜像上传Docker Hub,并且在腾讯云上pull该镜像,最后运行成功。

    1:在docker hub 上注册一个账号(本人直接能注册,有的说不能),然后创建自己的仓库. 2:登录docker hub ( longdbdocker --hub账号,longdb --仓库名称) ...

  10. MySQL设置远程连接服务器

    默认情况下,mysql只允许本地登录,如果要开启远程连接,则需要修改/etc/mysql/my.conf文件. 一.修改/etc/mysql/my.conf找到bind-address = 127.0 ...