js同步、异步、阻塞与非阻塞的知识点

   当你们在说同步,异步,阻塞,非阻塞的时候到底在说什么?

  一个术语的描述应该有一个目标对象吧

  那些说同步,异步的家伙,从来不说这个目标对象是谁,在程序的运行过程中,有很多参与者,到底这个同步,异步用来描述谁的呢?

  个人理解,同步与异步描述的是一种行为方式,阻塞与非阻塞描述的是一种状态。

  在js中,我们说同步,是说同步调用,举个栗子:

 代码如下  
function A(){
 
        B();
 
        C();
 
}

  那么A对B,C发起了同步调用,这里的主体是A。在执行A的时候,先执行B,在执行C,他们遵循严格的先后顺序。其实就是一个顺序执行。这是同步的具体特征。

  而我们说异步,其实是说异步调用方式,表现出的具体特征是改变代码的执行顺序,在js中其实就是延迟执行。

  例如:

 代码如下  

function A(){
 
       setTimeout( B(),200);
 
        C();
 
}

  这里让B延迟执行,A运行时,会先执行C(),再执行B(),这就是A对B的异步调用。;但是setTimeout(B(),200)这个语句和C的执行,仍然保持严格的先后顺序,只是C和B的执行顺序发生了改变。

  我认为使用同步调用,异步调用去描述这种现象更加明确。

时间: 2024-09-15 09:15:38

js同步、异步、阻塞与非阻塞的知识点的相关文章

js 同步、异步、阻塞与非阻塞的知识点

当你们在说同步,异步,阻塞,非阻塞的时候到底在说什么? 一个术语的描述应该有一个目标对象吧 那些说同步,异步的家伙,从来不说这个目标对象是谁,在程序的运行过程中,有很多参与者,到底这个同步,异步用来描述谁的呢? 个人理解,同步与异步描述的是一种行为方式,阻塞与非阻塞描述的是一种状态. 在js中,我们说同步,是说同步调用,举个栗子:  代码如下 复制代码 function A(){           B();           C();   } 那么A对B,C发起了同步调用,这里的主体是A.在

再谈IO的异步,同步,阻塞和非阻塞

原本转过一个<六种Socket I/O模型幽默讲解>,里面用比喻的方法讲解各种IO,但说到底那个时候我对同步异步这些还是只知其表.还未能完全理解异步和同步,现在觉得清晰一些了.总结一下. 前提概要: IO的过程: 整个IO的过程其实是应用发起IO的请求,到应用获取到IO请求数据的中间过程. 这个中间,其实主要的时间就是系统准备数据的过程.这也是异步技术的优化所在. 对系统调用的理解: 首先,我们要明确一点.IO的操作属于一种系统调用.也就是应用在运行中,进入到内核代码来执行某些重要的操作. 其

同步与异步、阻塞与非阻塞

这是两对概念,用在不同的语境会有一些不同的含义,不能一概而论. 整体来说,同步就是两种东西通过一种机制实现步调一致,异步是两种东西不必步调一致.   一.同步调用与异步调用: 在用在调用场景中,无非是对调用结果的不同处理. 我理解同步调用就是调用一但返回,就能知道结果,而异步是返回时不一定知道结果,还得通过其他机制来获知结果,如: a.   状态b.   通知c.   回调函数 这里的同步调用不一定会阻塞,例如立即返回失败的结果. 而异步调用立即返回时,你还拿不到结果的.   二.同步线程与异步

并发、并行、同步、异步、阻塞、非阻塞

最近在写爬虫 ,对于这几个概念比较模糊,所以特意学习了一下. 进程(process):进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进 行资源分配和调度的一个独立单位. 线程(thread):线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的 基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存 器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线

同步和异步, 阻塞和非阻塞, Reactor和Proactor

http://www.artima.com/articles/io_design_patterns.html http://note.sdo.com/u/1434409594/n/lvRFW~kjR2N0LX0nE004_r http://www.cnblogs.com/xuxm2007/archive/2011/08/15/2139808.html, 图示   我看了些blog, 很少有人能说清楚的, 而且很多人的理解根本就不对 通俗的说 阻塞和非阻塞, 等不等的问题, 傻等就是阻塞, 不等就

网络IO之阻塞、非阻塞、同步、异步总结

1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解.网上有详细的分析:http://blog.csdn.net/historyasamirror/article/details/5778378.我结合网上博客和书总结一下,加以区别,加深理解. 2.数据流向 网络IO操作实际过程涉及到内核和调用这个IO操作的进程.以read为例,read的具体操作分为以下两个

同步、异步、阻塞和非阻塞的概念

在进行网络编程时,我们常常见到同步.异步.阻塞和非阻塞四种调用方式.这些方式彼此概念并不好理解.下面是我对这些术语的理解.    同步         所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等).但是一般而言,我们在说同步.异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务.最常见的例子就是 SendMessage.该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返

也谈阻塞、非阻塞、同步、异步

最近在招聘中,发现不少人对BIO.NIO.AIO等理解非常模糊,觉得有必要写文章来纠正下很多人的误解. 在谈这些之前,非常有必要先介绍下Unix 5种IO模型: 阻塞: 阻塞是最常用的IO模型,默认情况下所有的文件操作都是阻塞的.以套接字编程为例.在进程空间中调用recvfrom,其系统调用直到数据报文到达且被拷贝到应用程序进程的缓存区(或者发生错误)后才返回,期间一直在等待.进程在从调用recvfrom开始到它返回的整段时间内是被阻塞的.有一张很经典的图: 非阻塞: 调用recvfrom从应用

同步~异步~阻塞~非阻塞

原文地址:同 步 和 异 步作者:zenos   一.同步-异步-阻塞-非阻塞     同步(Synchronous)和异步(Asynchronous)的概念本来来自通信领域:首先是通信的同步,主要是指客户端在发送请求后,必须得在服务端有回应后才发送下一个请求,所以这个时候的所有请求将会在服务端得到同步:其次是通信的异步,指客户端在发送请求后,不必等待服务端的回应就可以发送下一个请求,这样对于所有的请求动作来说将会在服务端得到异步,这条请求的链路就像是一个请求队列,所有的动作在这里不会得到同步的