标签:单线程 状态 期望 本质 磁盘 通知 异步io func logs
1、什么是回调? 是异步编程最基本的方法,对于nodejs来说需要按顺序执行异步逻辑的时候一般采用后续传递的方式,也就是将后续逻辑封装在回调函数中作为起始函数的参数逐层去嵌套。通过这种方式来让程序按照我们期望的方式走完整个流程。
2、什么是同步/异步?同步就是执行一个任务,后一个任务等待前一个任务执行完再执行。程序的执行顺序和任务的排列顺序是一致的。浏览器中的js是单线程的,是按顺序执行的,虽然js文件可以并行下载,但是必须按顺序执行。如果js中有死循环,那么页面就会阻止在这里,后面的js也不会执行。
js中的异步函数:setTimeOut setInterval
1 var c = 0 2 3 function printIt () { 4 console.log(c) 5 } 6 function plus (callback) { 7 setTimeout(function () { 8 c+=1 9 callback() 10 },1000) 11 } 12 13 plus(printIt)
3、什么是I/O?磁盘的写入和读出,数据的进和出。在nodejs中本质上是为数据库和文件系统这些资源提供接口,向文件系统发送一个请求的时候不用等待硬盘,硬盘准备好的时候非阻塞接口会通知到node。
4、什么是单线程/多线程? 单线程:程序是按顺序执行的。一次只能谈一个女朋友,分手后再谈下一个。如果一个女朋友纠缠你,就会导致阻塞。
多线程:有管理和分配资源的难度。可以同时脚踏几只船,但是要分配好资源。否则争抢资源,自己也会崩溃。
5、什么是阻塞/非阻塞?阻塞:如打电话预约,如果对方不回信,自己这里就一直是挂起状态。非阻塞:等不到回信,自己就先去玩,可以隔段时间打电话询问。
6、什么是事件?鼠标点击,拖拽窗口等。
7、什么是事件驱动?所有触发的事件都是EventEmitter的实例。为某个事件注册了回调函数,这个回调函数不是马上执行,只有当这个事件发生的时候才会调用回调函数,这种函数执行的方式就叫事件驱动。这种回调就叫基于事件驱动的回调。如果这些回调和异步的IO操作有关,这个就可以看作是基于回调的异步IO,这种回调在nodejs中是有事件来驱动的。
8、什么是基于事件驱动的回调?
9、什么是事件循环Eventloop?倘若有大量的异步操作,以及IO的耗时操作甚至是定时器控制的延时操作,他们完成的时候都会调用相应的回调函数,从而来完成一些密集的任务而又不会阻塞整个程序执行的流程,这时这么多事件就需要有一个机制来管理,这种机制就是事件循环。
Eventloop:是一个回调函数队列。当异步函数执行的时候,回调函数就会被压入到这个队列,对于nodejs来说靠一个单线程不断的查询队列中是否有事件,当他读取到一个事件的时候将调用与这个事件关联的js函数。事件的循环是先进先出的任务队列。回调就按照他们被加入队列的顺序来执行。整个队列可以理解成普通的函数和回调函数构成的完整的队列。
Nodejs的核心思想:单线程非阻塞和事件驱动
标签:单线程 状态 期望 本质 磁盘 通知 异步io func logs
原文地址:http://www.cnblogs.com/zuojiayi/p/6907598.html