异步 订阅
异步:一种通讯方式,对设备需求简单。我们的PC机提供的标准通信接口都是异步的。异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,同时在结束时有停止位。异步的另外一种含义是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。但此处需要明确的是:异步与多线程与并行不是同一个概念. 展开全文
异步:一种通讯方式,对设备需求简单。我们的PC机提供的标准通信接口都是异步的。异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,同时在结束时有停止位。异步的另外一种含义是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。但此处需要明确的是:异步与多线程与并行不是同一个概念.
信息
外文名
Asynchronous
中文名
异步
异步C#中的异步
异步的概念和同步相对。异步,线程,并行.三个概念是不同的.线程是进程中某个单一顺序的控制流。也被称为轻量进程(lightweight processes).计算机科学术语,指运行中的程序的调度单位. [1]  当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。以CAsyncSocket类为例(注意,CSocket从CAsyncSocket派生,但是其功能已经由异步转化为同步),当一个客户端通过调用Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。这里提到执行部件和调用者通过三种途径返回结果:状态、通知和回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误)。如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。一般指并行计算,是说同一时刻有多条指令同时被执行,这些指令可能执行于同一CPU的多核上,或者多个CPU上,或者多个物理主机甚至多个网络中. [2]  与同步相对应,异步指的是让CPU暂时搁置当前请求的响应,处理下一个请求,当通过轮询或其他方式得到回调通知后,开始运行。多线程将异步操作放入另一线程中运行,通过轮询或回调方法得到完成通知,但是完成端口,由操作系统接管异步操作的调度,通过硬件中断,在完成时触发回调方法,此方式不需要占用额外线程。 [3] 
收起全文
精华内容
参与话题
问答
  • 什么是异步操作

    千次阅读 2018-06-20 08:13:31
    异步指的是每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步...

    1.背景介绍


    同步指的是一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。


    异步指的是每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。


    2.知识剖析


    首先js是单线程的语言,即同一时间只能做做一件事。那Js如何实现异步的,异步和单线程不是自相矛盾吗?其实,单线程和异步确实不能同时成为一个语言的特性。js选择了成为单线程的语言,所以它本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的,宿主环境通过某种方式(事件驱动,下文会讲)使得js具备了异步的属性。


     浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:javascript引擎线程,UI渲染线程,浏览器事件触发线程。


     1.javascript引擎线程是基于事件驱动单线程执行的,JS引擎一直等待着任务队列中任务的到来,然后加以处理,浏览器无论什么时候都只有一个JS线程在运行JS程序。


    2.UI渲染线程负责渲染浏览器界面,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。但需要注意 UI渲染线程与JS引擎是互斥的,当JS引擎执行时UI线程会被挂起,UI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。


    3.事件触发线程,当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可来自JavaScript引擎当前执行的代码块如setTimeOut、也可来自浏览器内核的其他线程如鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。


    3.常见问题

    1.ajax发送异步请求浏览器做了什么。

    2.有哪些常见异步回调函数?


    4.解决方案

      1.Js创建了一个ajax请求
      2.浏览器另外开启一个ajax引擎线程,执行ajax请求
      3.执行得到响应后将回调函数放入任务队列中。

      4.Js执行任务队列中的回调函数。


    2.常见的异步

    1,点击时间,

    2,定时器,

    3,AJAX请求。


    5.遇到到问题。

    如何写一个简单的异步操作。

    答:回调函数也相当于异步操作,所以可以在函数A里面回调函数B。


    如果俩个定时器操作耗时一样长或者一个比一个操作耗时稍微短,代码如何执行。

    答:异步操作总是将耗时的任务放在后面执行所以耗时短的将会在前面执行,如果耗时一样长则看函数的排序,或者是否回调。


    Promise也是一种异步操作.then也是异步操作,这是为什么。

    具体我也不是很清除,一时半会不解决不了,所以我就说一下自己的理解,Promise是一种异步操作,.then是Promise的方法所以.then也是一种异步操作,自己的理解很可能不对,毕竟我也没怎么了解过。

    展开全文
  • 同步和异步的区别

    千次阅读 2017-09-21 17:53:48
    同步和异步的概念对于很多人来说是一个模糊的概念,是一种似乎只能意会不能言传的东西。其实我们的生活中存在着很多同步异步的例子。比如:你叫我去吃饭,我听到了就立刻和你去吃饭,如果我没有听到,你就会一直叫我...

    同步异步的概念对于很多人来说是一个模糊的概念,是一种似乎只能意会不能言传的东西。其实我们的生活中存在着很多同步异步的例子。比如:你叫我去吃饭,我听到了就立刻和你去吃饭,如果我没有听到,你就会一直叫我,直到我听见和你一起去吃饭,这个过程叫同步;异步过程指你叫我去吃饭,然后你就去吃饭了,而不管我是否和你一起去吃饭。而我得到消息后可能立即就走,也可能过段时间再走。如果我请你吃饭,就是同步,如果你请我吃饭就用异步,这样你比较省钱。哈哈哈。。。

    1. 在计算机领域,同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

    2. 而我们平时经常讨论的同步问题多发生在多线程环境中的数据共享问题。即当多个线程需要访问同一个资源时,它们需要以某种顺序来确保该资源在某一特定时刻只能被一个线程所访问,如果使用异步,程序的运行结果将不可预料。因此,在这种情况下,就必须对数据进行同步,即限制只能有一个进程访问资源,其他线程必须等待。

    3. 实现同步的机制主要有临界区、互斥、信号量和事件

      临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资 源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。

      互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享 .互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

      信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目 。信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。

      事件:通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作 。


    展开全文
  • 异步处理 通俗易懂

    千次阅读 多人点赞 2018-06-01 16:03:44
    老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶...(异步阻塞)老张觉得...

    老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)老张觉得自己聪明了。

    所谓同步异步,只是对于水壶而言。普通水壶,同步;响水壶,异步。虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

    所谓阻塞非阻塞,仅仅对于老张而言。立等的老张,阻塞;看电视的老张,非阻塞。情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

    展开全文
  • 真的理解同步和异步了吗?

    万次阅读 多人点赞 2018-03-10 18:09:22
    同步和异步"关键字的次数已经记不清了,总感觉自己知道点什么,但却又说不出来什么东西,这是为啥?—— 因为没有深入理解,没有总结;也应了那句古话:纸上学来终觉浅,绝知此事要躬行。 不卖关子了,开始...
    	老实说,玩电脑也玩了好几年了;印象中看到"同步和异步"关键字的次数已经记不清了,总感觉自己知道点什么,但却又说不出来什么东西,这是为啥?——  因为没有深入理解,没有总结;也应了那句古话:纸上学来终觉浅,绝知此事要躬行。 不卖关子了,开始进入正题。
    ”同步“就好比:你去外地上学(人生地不熟),突然生活费不够了;此时你决定打电话回家,通知家里转生活费过来,可是当你拨出电话时,对方一直处于待接听状态(即:打不通,联系不上),为了拿到生活费,你就不停的oncall、等待,最终可能不能及时要到生活费,导致你今天要做的事都没有完成,而白白花掉了时间。
    “异步”就是:在你打完电话发现没人接听时,猜想:对方可能在忙,暂时无法接听电话,所以你发了一条短信(或者语音留言,亦或是其他的方式)通知对方后便忙其他要紧的事了;这时你就不需要持续不断的拨打电话,还可以做其他事情;待一定时间后,对方看到你的留言便回复响应你,当然对方可能转钱也可能不转钱。但是整个一天下来,你还做了很多事情。 或者说你找室友临时借了一笔钱,又开始happy的上学时光了。
    简而言之,言而总之:同步就是我强依赖你(对方),我必须等到你的回复,才能做出下一步响应。即我的操作(行程)是顺序执行的,中间少了哪一步都不可以,或者说中间哪一步出错都不可以,类似于编程中程序被解释器顺序执行一样;同时如果我没有收到你的回复,我就一直处于等待、也就是阻塞的状态。 异步则相反,我并不强依赖你,我对你响应的时间也不敏感,无论你返回还是不返回,我都能继续运行;你响应并返回了,我就继续做之前的事情,你没有响应,我就做其他的事情。也就是说我不存在等待对方的概念,我就是非阻塞的。

    从上面的例子来看:同步似乎等价于阻塞,异步则等价于非阻塞。其实有些狭义,但不可否认的是,在一定情况下,确实可以这么认为;因为同步一定存在着阻塞状态,而异步一定不存在非阻塞的状态。 但是不是就是说 同步调用 == 阻塞调用呢?然并不是;阻塞和非阻塞强调的是程序在等待调用结果(消息,返回值)时的状态.  阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 对于同步调用来说,很多时候当前线程还是激活的状态,只是从逻辑上当前函数没有返回而已,即同步等待时什么都不干,白白占用着资源。同步和异步强调的是消息通信机制 (synchronous communication/ asynchronous communication)。所谓同步,就是在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由“调用者”主动等待这个“调用”的结果。而异步则是相反,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在"调用"发出后,"被调用者"通过状态、通知来通知调用者,或通过回调函数处理这个调用。段落参考原文链接:https://www.zhihu.com/question/19732473/answer/20851256

    展开全文
  • 什么是异步

    千次阅读 多人点赞 2018-12-22 08:53:27
    说说你的理解,什么是异步。 由于各个语言处理异步的机制有差异,我们这里只说 JS 中的异步。 怎么样的代码是异步代码? 我们先不深入异步概念,先从「表象」来看看怎么样的代码是异步代码: 异步代码的书写顺序...
  • 解决异步的方式

    2019-04-06 14:37:40
    为了解决这个问题,js将任务的执行分成两种模式:同步和异步 同步:会阻塞后面程序的运行 console.log(100) alert(200) //只有点击了确认按钮,后面的程序才会接着执行 console.log(300); 异步:不会阻塞后面程序的...
  • 详解.NET异步

    2019-01-08 01:00:31
    在说到异步前,先来理一下几个容易混淆的概念,并行、多线程、异步。  并行,一般指并行计算,是说同一时刻有多条指令同时被执行,这些指令可能执行于同一CPU的多核上,或者多个CPU上,或者多个物理主机甚至多个...
  • net 异步与同步

    2019-11-13 13:16:36
    一、摘论 为什么不是摘要呢?其实这个是我个人的想法,其实很多人在谈论异步与同步的时候都忽略了,同步异步不是软件的原理,其本身是计算机的原理及概念,这里就不过多的阐述计算机原理了。在学习同步与异步...
  • 什么才是真正的异步??

    千次阅读 2019-12-10 20:45:48
    异步定义 关于异步的定义,网上有很多不同的形式,但是归根结底中心思想是不变的。无论是在http请求调用的层面,还是在cpu内核态和用户态传输数据的层面,异步这个行为针对的是调用方: 一个可以无需等待被调用方的...
  • 同步异步/阻塞非阻塞

    千次阅读 2019-05-27 16:47:05
    网络中获取数据的读操作步骤: 等待数据准备。...如果是异步操作,那么它会去做别的事情,等待数据准备好,内核通知它,它再去读取数据。 同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完...
  • 前端异步(async)解决方案(所有方案)

    万次阅读 多人点赞 2019-04-15 22:40:59
    javascript是一门单线程语言,即一次只能完成一个任务,若有多个任务要执行,则必须排队按照队列来执行(前一个任务完成,再执行下一个任务)。 这种模式执行简单,但随着日后的需求,事务,请求增多,这种单线程模式执行效率...
  • 什么叫异步

    万次阅读 2018-06-11 11:50:11
    1.1 什么叫异步异步(async)是相对于同步(sync)而言的,很好理解。同步就是一件事一件事的执行。只有前一个任务执行完毕,才能执行后一个任务。而异步比如:setTimeout(function cbFn(){ console.log('learnInPro');...
  • js中的同步和异步的个人理解

    万次阅读 多人点赞 2017-06-09 15:09:05
    你应该知道,javascript语言是一门“单线程”的语言,不像java语言,...那么这里说的同步和异步到底是什么呢?其实个人觉得js官方的文档在使用两个词的时候并不准确,包括很多其他词汇,都只是听起来高深,但实际应用好
  • 所谓的异步是什么?

    万次阅读 多人点赞 2018-02-05 21:07:31
    异步初步了解: 今天学es6中碰到关于异步(Asynchronous)的问题,然后觉得听到异步这个词自己知道是个什么意思,但是如果要自己用代码解释出来的话.....所以慢慢整理了一些东西如下: 1. 说到异步,肯定...
  • mybatis异步操作数据库

    千次阅读 2018-09-13 10:54:43
    很多时候我们需要用mybatis来做数据库orm,基于mybatis 优秀的基因,我们能够轻松的搞定数据库的orm。...提到异步操作,我们就得提到回调接口。回调接口就是通过在主线程监听其他线程执行完的结果取得返回值。或...
  • 理解JS异步操作

    千次阅读 2019-03-12 10:37:54
    阮一峰ES5教程:异步操作—— 理解异步操作的基本模式和控制流程,了解定时任务的实现,Promise的用法 前端需要了解的浏览器原理(占坑) Inside look at modern web browser (part 1)—— 该系列文章一共4节,...
  • 异步方法中取消异步操作

    千次阅读 2018-12-24 14:29:30
    1、在异步方法中取消异步操作,第一步必须声明CancellationToken和CancellationTokenSource两个类对象,并将两个类通过 CancellationTokenSource 对象的token属性关联; CancellationTokenSource cts = new ...
  • C#异步操作 异步查询数据库 异步处理一行一行加载数据
  • JS同步和异步 一、单线程模型 JavaScript是一门单线程的语言,所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务。 看下面一段代码在浏览器中的执行的...
  • C#学习笔记 异步操作

    2016-01-09 23:29:39
    同步操作默认情况下我们的代码都是同步操作。这种情况下,所有的操作都在同一个线程中,如果遇到需要长时间执行的操作或者是一个IO操作,那么代码可能会阻塞比较长的时间。在阻塞的这段时间里,无法进行其他工作,这...
  • Javascript 遍历中异步操作

    千次阅读 2018-05-03 17:43:01
    JS遍历中异步操作,指的是JS循环遍历中,每一次循环都有异步操作。 如经典的闭包应用,每次循环, 在异步操作中输出索引。 for (var i = 0; i < 3; i++) { setTimeout(() => { console.log('i', i)...
  • WPF中异步操作

    千次阅读 2018-12-07 10:16:31
    在WPF中直接开辟一个线程执行异步操作时,如果与UI界面有交互则会直接报错,此时我们使用如下方法实现异步操作 private void checkoutOnLine() { Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle, new ...
  • 异步操作和同步操作

    千次阅读 2019-07-25 12:47:58
    同步和异步 同步(如银行转账系统的保存操作需要同步操作) 同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,发送一个请求,需要等待返回,才能发送下一个请求 给用户一种卡死了的感觉...
  • 异步操作的优缺点及其应用场合

    万次阅读 2013-11-25 14:38:10
    我曾经提到异步操作能提高系统的吞吐能力,正确使用异步操作来校正滥用异步的错误做法,那异步究竟有何优点值得我们使用?而又有什么缺点需要我们使用的时候小心呢?诚如老赵所说, 异步并不一定能提高系统性能,...
  • C# 异步操作

    千次阅读 2013-09-18 21:22:48
    using System; using System.Net; using System.Threading; using System.Text; using System.IO; ...//Request 类用于通过 //异步调用传递数据 public class RequestState { const int BUFFER_SIZE = 1024; pub
  • C#异步操作

    2016-07-10 20:14:39
    异步操作种类 1、异步委托APM 异步编程模型 (APM) 模式(也称为 IAsyncResult 模式),其中异步操作要求 Begin 和 End 方法(例如,异步写操作的 BeginWrite 和 EndWrite)。对于新的开发工作不再建议采用此模式...
  • Promise封装异步操作

    千次阅读 多人点赞 2020-10-21 14:38:36
    异步操作一般情况下是比较耗时的,此时代码执行到这个地方会出现阻塞,影响后续代码的运行,为了解决这个问题,我们一般在此时进行异步操作,即在发送网络请求的同时,继续执行后续代码,然后网络请求结束后,通过...
  • Vue-Promise 异步操作 总结

    千次阅读 2019-10-23 16:04:24
    1. Promise 是一个构造函数, 我们可以用new Promise() 获取一个Promise 实例 2. Promise 有两个函数,...4. Promise 表示一个异步操作,每当我们new 一个Promise 的实例, 这个实例 就表示一个具体的异步操作。 5...
  • 有一部分的异步操作需要查询当前事务方法的保存/修改数据. 所以, 如果直接在事务方法中调用异步方法的话, 有几率查询不到最新的值. 解决方法 方案一: 调用异步的方法不要写在A操作的方法中,如下伪代码 @...
  • setTimeout是不是异步操作

    千次阅读 2018-01-23 14:48:44
    同步和异步操作的区别就是是否阻碍后续代码的执行。 在setTimeout的执行形式上来看,setTimeout是不会阻碍其后续代码的执行的。所以可以理解为setTimeout是异步操作。 setTimeout的本质不是延迟多长时间执行,而是...

空空如也

1 2 3 4 5 ... 20
收藏数 1,049,173
精华内容 419,669
关键字:

异步