异步_异步请求 - CSDN
异步 订阅
异步:一种通讯方式,对设备需求简单。我们的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 18:04:55
    同步和异步的概念对于很多人来说是一个模糊的概念,是一种似乎只能意会不能言传的东西。其实我们的生活中存在着很多同步异步的例子。比如:你叫我去吃饭,我听到了就立刻和你去吃饭,如果我没有听到,你就会一直叫我...

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

    展开全文
  • 同步和异步

    千次阅读 2018-07-08 10:23:15
    同步和异步通常用来形容方法的调用方式。同步方法表明调用一旦开始,调用者必须等待方法执行完成,才能继续执行后续方法。异步方法表明,方法一旦开始,立即返回,调用者无需等待其中方法执行完成,就可以继续执行...
  • python_异步

    千次阅读 2018-12-12 17:04:01
    深入理解 Python 异步编程   前言 很多朋友对异步编程都处于“听说很强大”的认知状态。鲜有在生产项目中使用它。而使用它的同学,则大多数都停留在知道如何使用 Tornado、Twisted、Gevent 这类异步框架上,出现...
  • 什么是异步

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

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

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

    万次阅读 多人点赞 2017-07-27 09:21:15
    你应该知道,javascript语言是一门“单线程”的语言,不像java语言,...那么这里说的同步和异步到底是什么呢?其实个人觉得js官方的文档在使用两个词的时候并不准确,包括很多其他词汇,都只是听起来高深,但实际应用好
  • 计算机领域中的同步和异步的概念和我们平时生活中的同步和异步是不一样的,这就让很多人难以理解。 同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。是一种线性执行的方式,执行的流程不能跨越。...
  • ajax 同步和异步区别?

    万次阅读 多人点赞 2019-01-09 08:57:06
    ajax 同步和异步区别? 我们在使用 ajax 一般都会使用异步处理。 异步处理呢就是我们通过事件触发到 ajax,请求服务器,在这个期间无论服务器有没有响应,客户端的其他代码一样可以运行。 同步处理:我们通过实践...
  • 同步、异步的使用场景及好处

    万次阅读 2016-06-02 11:02:15
    异步的使用场景: 1、不涉及共享资源,或对共享资源只读,即非互斥操作 2、没有时序上的严格关系 3、不需要原子操作,或可以通过其他方式控制原子性 4、常用于IO操作等耗时操作,因为比较影响客户体验和...
  • python 实现异步执行

    万次阅读 2017-08-24 16:12:32
    python 实现异步执行 网上看到个例子怎样利用 threading 模块实现异步执行,自己动手试了试,写了个装饰器的例子,很实用。 把 async 分离开,放到一个单独的模块中,就可以把它当成一个模块实用 分析一下,下面...
  • JS中的异步操作有哪些

    千次阅读 2018-02-03 22:31:22
    JS中的异步操作: 1、定时器都是异步操作 2、事件绑定都是异步操作 3、AJAX中一般我们都采取异步操作(也可以同步) 4、回调函数可以理解为异步(不是严谨的异步操作) 剩下的都是同步处理
  • flask实现异步任务

    万次阅读 2018-09-29 16:44:28
    flask实现异步任务 最近在开发同步mysql数据到redis的接口,因为数据同步涉及各种增删查改,如果用同步实现,可能回造成连接超时、堵塞,所以,使用python实现异步任务。 代码实现 from flask import Flask ...
  • js异步执行的四种方式

    万次阅读 2018-09-06 21:17:34
    1、回调函数--把同步操作变成异步,f1不会阻塞程序运行,相当于先执行程序的主要逻辑将耗时的延迟执行 function f1(callback){ setTimeout(function(){ //f1的代码 callback(); },1000) } f1(f2); 2、事件...
  • 同步请求和异步请求的区别

    万次阅读 多人点赞 2019-01-10 09:03:57
    举个例子:普通B/S模式(同步)AJAX技术(异步)同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作...
  • Python 实现异步调用函数

    万次阅读 2018-06-14 14:09:05
    async_call.py #coding:utf-8 from threading import Thread def async_call(fn): def wrapper(*args, **kwargs): Thread(target=fn, args=args, kwargs=kwargs).start() return wrapper ...
  • JS中 异步 等待某个方法中的所有异步方法完成后操作 需导入JQ,也可使用原js 的Promise 完成,不过可能不兼容某些浏览器 //可以直接复制下面的所有代码,在谷歌浏览器中 F12 中控制台中运行 function runAsync(){ ...
1 2 3 4 5 ... 20
收藏数 986,611
精华内容 394,644
关键字:

异步