本文作为图解java并发编程的第三篇,前2篇访问地址如下所示:

一、CPU角度的并发与并行

并发

曾经我作为一个不是很爱学习的孩子,在上学的时候经常做这样的事情:在数学课上补物理作业,数学课听懂了,物理作业也上交了。不谦虚的说,我是具备这样的能力,但很可惜没用对地方。

很多同学说:“你是不是有多个大脑?”,肯定不是啊,其实这是一种切换的能力。当你同时做多件事情,并且能够快速切换的时候。在别人开来,你就有了并发的能力,但是你的大脑还是一个大脑。

我们的计算机在绝大部分时间都运行很多很多的进程与线程,所以CPU并发执行并切换分配CPU时间片资源是一种常态。只是CPU的执行速度实在是太快了,快到绝大部分情况下你都无法感知“执行线程的切换”。所以看上去它在一边播放音乐,一边运行浏览器,一边运行其他软件。

并行

知道了计算机中并发的概念,我们来举例了解一下并行的概念。

  • 你在餐厅点餐,点餐后等餐的同时你在读书。看上去你是在做两件事,等餐和读书。实际上只有一件事是需要你实际操作的,那就是读书;另外一件事实际上是做菜,做菜是由餐厅的厨师进行的。

随着计算机多核CPU的普及,计算机也在一定程度上具备了并行计算的能力。那这么说,单核心的CPU就一定不存在并行能力喽?也并非完全如此,若单核心的CPU拥有Hyper-threading技术,那么单核心可以并行的运行两个逻辑线程。

二、线程角度的并发与并行

上面的并发与并行的解释更多的是从CPU运行的角度,但作为程序员更关心的是作为开发者如何区分并发与并行。

从线程的角度去谈并行,通常是指在多线程间不存在数据共享或通信,能够利用CPU的并行能力去运行多线程。

从线程的角度去谈并发,通常是指多个线程之间存在资源共享(内存、代码段等),彼此协调共享资源的使用,从而交出或获得CPU执行时间片的使用权。

总结一句话,希望对你与理解并发与并行有帮助,并发是看上去的并行,实际上的资源切换,并发目的是将资源利用能力最大化、最优化。

欢迎关注我的博客,里面有很多精品合集

  • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

图解并发与并行-分别从CPU和线程的角度理解的更多相关文章

  1. Java多线程原理+基础知识(超级超级详细)+(并发与并行)+(进程与线程)1

    Java多线程 我们先来了解两个概念!!!! 1.什么是并发与并行 2.什么是进程与线程 1.什么是并发与并行 1.1并行:两个事情在同一时刻发生 1.2并发:两个事情在同一时间段内发生 并发与并行的 ...

  2. java核心知识点学习----并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器

    多线程并发就像是内功,框架都像是外功,内功不足,外功也难得精要. 1.进程和线程的区别 一个程序至少有一个进程,一个进程至少有一个线程. 用工厂来比喻就是,一个工厂可以生产不同种类的产品,操作系统就是 ...

  3. 关于CPU核心,线程,进程,并发,并行,及java线程之间的关系

    前言:作为一个转行java的小白,一直搞不清楚java中的多线程.于是来梳理一下关于CPU核心,线程,进程,并发,并行,及java线程之间的关系, 1.CPU角度来看: 我们以Intel的Core i ...

  4. CPU时间分片、多线程、并发和并行

    1.CPU时间分片.多线程? 如果线程数不多于CPU核心数,会把各个线程都分配一个核心,不需分片,而当线程数多于CPU核心数时才会分片. 2.并发和并行的区别 并发:当有多个线程在操作时,如果系统只有 ...

  5. Python 多线程教程:并发与并行

    转载于: https://my.oschina.net/leejun2005/blog/398826 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global int ...

  6. go并发和并行

    Go语言的并发和并行 不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话: var quit chan int = make(chan int) func loop ...

  7. Go语言并发与并行学习笔记(二)

    转:http://blog.csdn.net/kjfcpua/article/details/18265461 Go语言的并发和并行 不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goro ...

  8. Python并发与并行的新手指南

    点这里 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为“GIL”)指指点点,说它阻碍了Python的多线程 ...

  9. 并发与并行的区别 The differences between Concurrency and Parallel

    逻辑控制流 在程序加载到内存并执行的时候(进程),操作系统会通过让它和其他进程分时段占用CPU(CPU slices)让它产生自己独占CPU的假象(同时通过虚拟内存让它产生独占内存的假象).在CPU在 ...

随机推荐

  1. C++字符串转整形、浮点型stof()、atoi()、strtol()等

    头文件:#include<stdlib.h>string str;stof:float val=stof(str);atoi:int val=atoi(str);atol:long val ...

  2. K均值聚类和DBSCAN介绍

    K均值(K-means)聚类 问题定义:给定数据$\vec{x}_1,\vec{x}_2,\cdots,\vec{x}_n$,将它们分到不同的$K$个簇(cluster)中.定义$\vec{c}=(c ...

  3. md文件批量转化为html

    任务描述 博客的源文件一般以md文件保存 读取md源文件解析为html代码,然后嵌入到body中去 公式部分,需要使用第三方js库加载 实现办法 基于Django实现,进入webpage页面,然后通过 ...

  4. 双向BFS和启发式搜索的应用

    题目链接 P5507 机关 题意简述   有12个旋钮,每个旋钮开始时处于状态 \(1\) ~ \(4\) ,每次操作可以往规定方向转动一个旋钮 (\(1\Rightarrow2\Rightarrow ...

  5. Python-Opencv 图像处理基本操作

    Python-Opencv 图像处理基本操作 1.图像读取 使用cv2.imread(filepath,flags)读入图像 filepath: 读入图像完整路径(绝对路径,相对路径) flags: ...

  6. Mybatis-plus 实体类新增属性,使用实体类执行sql操作时忽略该属性 注解

    @TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不 ...

  7. Python的序列数据和变量

    本篇内容涉及字符串.列表.元组.Python中的报错,以及变量本质,包括引用计数技术 该篇只为抛砖引玉,其内容来自Python学习中总结,另外感谢李老师的教导和Python班同学们的帮助 附上李老师和 ...

  8. JavaScript学习系列博客_34_JavaScript RegExp对象

    RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 创建 RegExp 对象的语法(构造函数方式): pattern:正则表达式,attributes:匹配模式 ...

  9. ondyari / FaceForensics配置指南

    https://github.com/ondyari/FaceForensics 安装配置方法: $ git clone https://github.com/ondyari/FaceForensic ...

  10. 关闭jetbrains ide support 正在调试此浏览器提示

    1 安装JetBrains IDE Support插件 插件地址 2 启用插件 3 设置访问端口 4 WebStorm中设置Live Edit 5 关闭"JetBrains IDE Supp ...