精华内容
下载资源
问答
  • 并发是同步还是异步
    千次阅读
    2018-12-08 01:17:17

      老是忘记并发和并行,同步和异步之间的区别,今天写篇博客,加深印象。

    并发 & 并行

     并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。这种方式我们称之为并发(Concurrent)。

    并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

    区别:并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。

    同步 & 异步

    这里介绍两种情况下的同步和异步。

    在I/O模型中,“同步”和“异步”的区别在于内核向应用程序通知的是何种I/O事件(是就绪事件还是完成事件),以及有谁来完成I/O读写(是应用程序还是内核)。

    同步I/O模型要求用户代码自行执行I/O操作(将数据从内核缓冲区读入用户缓冲区,或将数据从用户缓冲区写入内核缓冲区)。同步I/O向应用程序通知的是I/O就绪事件。

    异步I/O模型则由内核来执行I/O操作(数据在内核缓冲区和用户缓冲区之间的移动是由内核在“后台”完成的)。异步I/O向应用程序通知的是I/O完成事件。

    在并发模式中,“同步”指的是程序完全按照代码序列的顺序执行;“异步”指的是程序的执行需要由系统事件来驱动。常见的系统事件包括中断、信号等。

    更多相关内容
  • 异步:异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。 并发 并行 同步 异步 多线程的区别:  1.并发:在操作系统中...

     

    同步和异步的概念: 
    同步:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去

    异步:异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

    并发 并行 同步 异步 多线程的区别: 
    1.并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥

    2.互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。

    3.同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。 
    其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。

    4.并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。从而可知,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。

    5.多线程:多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码。多线程可以实现线程间的切换执行。

    6.异步:异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。 
    异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。

    事例: 
    为了对以上概念的更好理解举一个简单例子,假设我要做烧开水,举杠铃100下,洗衣服3件事情。 
    烧开水 这件事情, 我要做的事情为,准备烧开水1分钟,等开水烧开 8 分钟,关掉烧水机1分钟 
    举杠铃100下 我要做的事情为, 举杠铃100下10分钟 
    洗衣服 我要做的事情为,准备洗衣服1分钟,等开水烧开 5 分钟,关掉洗衣机1分钟

    单核情况下: 
    同步的完成,我需要做的时间为 1+ 8 +1 + 10 + 1+ 5 +1 = 27 分

    如果异步: 
    就是在等的时候,我可以切换去做别的事情 
    准备烧开水(1) + 准备洗衣服(1) + 举50下杠铃 (5)分钟+ 关洗衣机 1分钟 + 举杠铃20下 (2)分钟+ 关烧水机 1分钟 + 举30下杠铃(3)分钟 
    1+1+5+1+2+1+3 =14分钟

    双核 异步 并行: 
    核1 准备烧开水1分钟+ 举杠铃50下(5)分钟+ 等待3分钟 + 关掉烧水机1分钟 
    核2 准备洗衣服1分钟+ 举杠铃50下(5)分钟+ 关掉洗衣机1分钟 + 等待3分钟 
    其实只花了 1+5+3+1 = 10分钟 
    其中还有双核都等待了3分钟

    双核 异步 非并行: 
    核1 举杠铃100下(10)分钟 
    核2 准备烧开水1分钟+ 准备洗衣服 1分钟+ 等待5分钟+ + 关掉烧水机1分钟 + 等待1分钟 + 关掉洗衣机1分钟 
    其实只花了1+5+3+1 = 10分钟

    多线程的做法: 
    单核下 
    线程1 准备烧开水 1分钟, 等开水烧开 8 分钟 , 关掉烧水机 1分钟 
    线程2 举杠铃100下 10分钟 
    线程3 准备洗衣服 1分钟, 等开水烧开 5 分钟 , 关掉洗衣机 1分钟

    cpu 可能这么切换 最理想的切换方式 
    线程1 准备烧开水1 sleep 1 sleep 5 sleep 1 sleep 2 关开水 1分钟 exit 
    线程2 sleep 1 sleep 1 举杠铃50 5分钟 sleep 1 举杠铃20 2分钟 sleep1 举杠铃30下 3分钟 
    线程3 sleep 1 准备洗衣服1 分钟 sleep 5 关洗衣机1分钟 exit 
    最后使用了 14分钟 和异步是一样的。 
    但是实际上是不一样的,因为线程不会按照我们设想的去跑,如果线程2举杠铃先跑,整个流程的速度就下来了。

    总结: 
    异步和同步的区别: 
    在io等待的时候,同步不会切走,浪费了时间。 
    如果都是独占cpu 的业务,比如举杠铃的业务,在单核情况下多线程和单线程没有区别。

    多线程的好处: 
    比较容易的实现了异步切换的思想,因为异步的程序很难写的。多线程本身程还是以同步完成,但是应该说 
    比效率是比不上异步的。而且多线很容易写,相对效率也高。

    多核的好处,就是可以同时做事情,这个和单核完全不一样的。 
    附技术框架学习图谱: 
    http://download.csdn.net/detail/bryant_liu24/9738649

    本文转自 https://blog.csdn.net/bryant_liu24/article/details/55506029

    展开全文
  • 但在这当中,发现一些概念区分起来很难,比如并发和并行,同步异步,阻塞和非阻塞,但是这些概念却很重要。因此在此把它总结下来。并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间...
  • 从编程模式的角度:同步异步 1、并行、并发:CPU视角 (1)并行:多个任务真正意义上被同时执行,非多核CPU或者多CPU环境不行,即CPU的每个核同时执行不同的任务。 (2)并发:泛指多个任务被 “同时” 执行,...

    个人理解这4个概念是从不同角度看:“多个任务被同时执行” 这件事。

    从CPU的角度:并行、并发

    从编程模式的角度:同步、异步

    1、并行、并发:CPU视角

    (1)并行:多个任务真正意义上被同时执行,非多核CPU或者多CPU环境不行,即CPU的每个核同时执行不同的任务。

    (2)并发:泛指多个任务被 “同时” 执行,这个 “同时” 可以是人类感觉上的 “同时”(即退化的伪并行),也可以是真正意义上的 “同时”(即真并行,此时是并行)。至于是 人类感觉上的“同时”(伪并行)还是真正的 “同时”(真并行),取决于任务运行的环境:是否有多核CPU或者多CPU。

    如果运行环境是单核单CPU,那么显然不可能是 “真并行”,那么OS会通过为各个任务分配CPU时间片的方式,交替执行各个任务,只不过这个交替的速度很快,人类感觉不到这种交替切换,所以就感觉上各个任务似乎也在 “同时” 执行(伪并行,此时是并发)。

    2、同步、异步:程序员编程视角

    (1)同步:让各个任务依次被执行,各个任务被运行的时间上没有重叠,即上一个任务执行完毕后,才可以执行下一个任务,即同步中没有 “并发” 甚或 “并行” 的概念。

    至于多线程时是否可以同步?即有多个任务,每个任务起一个线程,是否仍然可以实现同步?显然是可以的,具体见参考4。

    (2)异步:相对于同步,一个任务无需等待上一个任务执行完毕 就可以被执行。这种任务执行编程范式就叫异步。

    那么从CPU视角看,异步中多个任务被执行的方式,类似 “同时” 执行了多个任务,即并发。

    个人理解与 并发 的区别是:并发强调让任务 “同时” 执行(不论是真同时,还是感觉上同时),但是异步不强调 “同时”。例如,正在被CPU执行的任务一可以被任务二打断,在并发环境下,任务二的时间片用完后,就必须将CPU交给任务一了,任务一继续被执行,任务一时间片用完后,就需要把CPU交给任务二了,这样快速交替下去,让人感觉,这两个任务似乎在同时执行;而在异步下,任务二在打断任务一后,可以一直被执行下去,不用考虑是否做到 让人类觉得 “同时” 在执行两个任务,即任务二可以一直执行下去,当然是否需要让任务二一直执行下去,视业务需要。

    参考:

    1、一个视频告诉你“并发、并行、异步、同步”的区别_哔哩哔哩_bilibili

    2、操作系统中的并行、并发、同步、异步等概念 - 知乎 

    3、并发、并行、同步、异步的概念_郑*杰的博客-CSDN博客_同步并行 

    4、谈谈对并发、并行、同步、异步的理解_hzyangccc的博客-CSDN博客_同步并行

    5、并行和并发,同步和异步的区别_昕昕向荣的博客-CSDN博客_同步和并发的区别icon-default.png?t=M3K6https://blog.csdn.net/weixin_42736024/article/details/84889206?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1.pc_relevant_paycolumn_v3&utm_relevant_index=2 

    展开全文
  • 4.并发的概念 5.什么是同步? 6.什么是异步? 7.个人理解 1.认识进程与线程 首先需要了解一下进程和线程的概念。进程是系统资源分配和调度的基本单位,而线程是程序执行的最小单位。我们可以看成进程是由线程组成的...

    目录

    1.认识进程与线程

    2.串行的概念

    3.并行的概念

    4.并发的概念

    5.什么是同步?

    6.什么是异步?

    7.个人理解


    1.认识进程与线程

    首先需要了解一下进程和线程的概念。进程是系统资源分配和调度的基本单位,而线程是程序执行的最小单位。我们可以看成进程是由线程组成的。

    2.串行的概念

    串行是指一个时间段内,执行一个任务的同时不能执行其他任务,只能等到第一个任务弯沉过后才能进行第二个。比如排队上厕所,你只有等前一个人上完了,才可以进去。

    3.并行的概念

    并行是指一个时间段内,同时执行多个任务。比如操作系统中含有多个CPU,每个CPU可以同时执行多个任务。举个生活中的例子,边洗澡边唱歌,两件事情同时做,这就是并行

    4.并发的概念

    并发是值一个时间段内,两个或者两个以上任务都处于开启状态,而系统资源不够,采取的一种交替执行的方式,由于切换任务时间极短,感官上感觉不到,所以称为并发。比如说,在吃饭的时候,电话响了,此时我把碗放下去电话,接完电话再吃饭,这就是并发

    5.什么是同步?

    所谓同步是指发出一个功能调用时,在没有得到结果之前,该调用不返回。

    6.什么是异步?

    异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

    7.个人理解

    不知道你会不会有这样的疑问觉得异步和并发是一种东西,两者差距不大。事实上,这两者是两回事。我的理解是异步、同步是一种代码处理的方式,区别在程序调用时,根据是否等待返回结果后再进行下一步操作。串行、并发、并行更多是指操作系统在处理程序时才采用的方。


    小伙伴们,关注公众号《程序员小M》!!我们会定期分享关于大数据开发及后端开发相关内容,期待您的关注。

                                    ​​​​​​​        ​​​​​​​                

    展开全文
  • 比如: 一个财务系统,两个人同时对总钱数进行操作,一个加10块一个减100块,注意这两个操作是同时进行的,那系统就不知道是加还是减了,这是并发问题。或者,多个线程同时请求同一个资源,必然导致此资源的数据不...
  • 并行 与并发同步异步的区别

    千次阅读 2020-04-08 20:59:26
    但在这当中,发现一些概念区分起来很难,比如并发和并行,同步异步,阻塞和非阻塞,但是这些概念却很重要。因此在此把它总结下来。 1. 并发 & 并行  并发:在操作系统中,是指一个时间段中有...
  • 并发与并行 假设一个工厂,包含多个车间,一个车间包含多个工人和多个房间。 什么是cpu?工厂是时刻在运行的,因此可以理解cpu时刻在运行。 什么cpu的核数?假设把一个cpu比作一份电量的话,一份电量又只能满足一...
  • 同步并发异步并发

    2020-04-08 21:02:35
    异步是实现并发的手段之一,参考Python asyncio。 同步(非阻塞)同样可以实现并发并发是一种需求,表示有很多业务活动同时进行。 异步是一种代码编写方式,一般用在被动处理上。比如xml的sax解析方式就是异步...
  • 已发送监控告警信息不同渠道为例,展示同步异步编程实战。
  • Go并发同步异步、异步回调

    千次阅读 2021-08-08 09:14:29
    下面我们先来了解一下Go并发的一些理论基础:同步异步、异步回调。也顺带在此介绍一下进程、线程、协程的区别。 进程、线程、协程的区别 一边写代码、一边听音乐、一边聊天这就是进程并发。 一个进程可以开几条线程...
  • 无论是并发、并行也好,还是同步异步也好,其实都离不开任务这个概念。然而,任务的概念却很难具体定义。一个任务对应一个cpu算术运算?一个函数?还是一串函数的执行?并且,一个任务往往是可再分的,所以很多...
  • 其中两种并发关系分别是同步和互斥。所谓互斥,是指分布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任...
  • 最近在工作中用到了libcurl请求大量网页,感觉使用多线程的方式线程数太高的话会影响...这个异步框架和平常使用的同步请求思路上有些不同,具体有哪些不同,可以看源码。@啪啪啪么么哒。Tags:libcurl高并发http模型。
  • 有时候我们需要根据参数不同来引入不同的js文件,用html直接写标签满足不了我们的需求,总结几种方法,以及同步异步加载的各种需求 一.直接加载 <div id=divId></div> [removed] 二.异步加载,并发执行,但引入js...
  • 并发、并行、串行、同步异步的区别?

    千次阅读 多人点赞 2019-01-25 16:17:21
    1.并发编程又叫多线程编程。     在程序中,往往有很多很耗时的工作,比如上传文件、下载文件、跟客户聊天需要长时间建立连接。这种时候,一个线程是服务不了多个用户的,会产生因为资源独占产生的等待问题。...
  • 异步 1.谈到并发,就不得不提串行和并行了。这三点容易混淆。 如下图所示, 串行:一个时间段内,执行一个任务的同时不能执行其他任务,只能等到第一个任务完成后才能进行第二个。 并行:一个时间段内有多个任务...
  • 最近在工作中用到了libcurl请求大量网页,感觉使用多线程的方式线程数太高的话会影响性能,然后就写了一个简单的基于libcurl和...这个异步框架和平常使用的同步请求思路上有些不同,具体有哪些不同,可以看源码。
  • 并发、多线程、同步异步概念的介绍。。。
  • 并行和并发同步异步的区别 戎·码一生 2013-08-06 20:49:32 3498 收藏 5 分类专栏: 操作系统 版权 1、并行 对多处理器而言--多个程序在同一时刻发生,具有并发的含义,但并发不一定并行,也亦是说并发事件之间...
  • 实际开发中很多人会因为并发,并行,串行,同步异步等名词搞混,搞不清楚这些名称的意思和之间对应的关系。其实这也是实际开发中必须掌握一些知识点。掌握和理解这些概念也有助于我们去更好去开好。 1.并发编程...
  • 同步异步 同步异步:被调用者是否主动告诉调用者结果,重心是被调用者。 同步异步通常用来形容一次调用,关注的是消息通信机制。同步调用一旦开始,调用者必须等到调用返回后,才能进行后续的行为。也就是说,...
  • 然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率,弥补了python性能方面的短板,如最新的微服务框架japronto,resquests per second可达百万级。 python还有一个优势是库(第三方库)极为...
  • Java中的同步异步详细介绍

    千次阅读 2021-02-12 09:56:52
    进程同步用来实现程序并发执行时候的可再现性。一.进程同步异步的概念1.进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事.就像...
  • 特征惰性:延迟应用操作,直到需要结果为止功能性:提供高度可组合的功能迭代:支持同步迭代,异步迭代和唯一的并发迭代异步并发:在异步可迭代对象上顺序应用异步操作,或在并发可迭代对象上同时应用异步操作Tree...
  • 同步异步到底是什么???

    千次阅读 2021-07-30 02:59:05
    总得来说,同步异步出现在以下几个领域:1 计算机网络。数据通信技术中有同步通信与异步通信。同步通信简单的说就是你在发送数据时候我必须同时接受。这个过程有精确的时钟控制。而异步通信是你在发数据时候必须加上...
  • 同步 同步就是发起一个请求,直到请求返回...同步异步的区别: 请求发出后,是否需要等待请求结果,才能继续执行其他操作。 阻塞 在调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会被唤...
  • Python3爬虫系列的理论验证,比较同步依序下载、多进程并发、多线程并发和asyncio异步编程之间的效率差别

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,170
精华内容 83,668
热门标签
关键字:

并发是同步还是异步

友情链接: mapred.zip