热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

node学习记录(一)

node的特点:它作为js的运行平台,node保留了前端浏览器js那些熟悉的接口,依旧基于作用于和原型链,区别在于它将前端中广泛应用的思想迁移到服务器。异步IO:关键字:异

node的特点:它作为js的运行平台,node保留了前端浏览器js那些熟悉的接口,依旧基于作用于和原型链,区别在于它将前端中广泛应用的思想迁移到服务器。

  • 异步I/O:

    关键字 : 异步,阻塞,回调,事件

    why:前端通过异步可以消除UI阻塞的现象;前端获取资源的速度也取决与后端的响应速度,采用异步获取的速度更快。

    eg: 面对两个相同的两个事件:
    同步:事件一请求结束后才允许第二个事件请求。
    异步:事件二的请求并不阻塞第二个资源,也就是第二个事件的请求并不会依赖事件一的结束,这样就可以享受并发的优势。

    how:
    node采用 单线程资源分配方式

    node选择:
    利用单线程,远离多线程死锁,状态同步等问题 ;
    利用异步I/O的方式,让单线程远离阻塞,以更好的使用CPU。

  • node的异步I/O

    单线程   事件循环   观察者    I/O线程池  请求对象
    
    • 事件循环
      它是node的自身执行模式,在进程启动的时候,node创建一个while(ture)循环–Tick,每个Tick就是查看是否有事件待处理,如果有,请求相应的回调函数进行处理,如果不再有事件处理,就退出进程。

    • 观察者
      观察者用来判断是否還有事件要处理。每个事件中有一个或者多个观察者,判断是否有事件要处理,就是向这些观察者询问是否有要处理的事件。

    • 请求对象
      请求对象是从JS发起调用到内核执行完成I/O操作过渡过程的一种中间产物,所有对象都保存在这个对象中,包括送入线程池等待以及I/O操作完毕后的回调处理。

    • 执行回调线程池中的I/O操作调用完毕,将获取的结果存储在req->result属性上。然后调用PostQueuedCompletionStatus(),告知对象操作已经完成,此方法之后会将线程归还线程池,然后提交状态。通过get()方法提取。

整个过程

异步调用(发起 ——封装请求对象——设置参数和回调函数——请求对象放入线程池等待)——线程池(执行请求I/O操作——将执行结果放在请求对象中——通知完成操作)——事件循环(获取完成的I/O交给I/O观察者——从观察者获取可用的请求对象——取出回调函数和结果调用执行——获取完成的I/O交给I/O观察者)

  • 非I/O的异步API

    • 定时器
      setTimeout();
      setInterval();
    • process.nextTick
    • setImmediate

 (未完待续)

推荐阅读
author-avatar
mobiledu2502907423
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有