热门标签 | 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

 (未完待续)

推荐阅读
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 黑马头条项目:Vue 文章详情模块与交互功能实现
    本文详细介绍了如何在黑马头条项目中配置文章详情模块的路由、获取和展示文章详情数据,以及实现关注、点赞、不喜欢和评论功能。通过这些步骤,您可以全面了解如何开发一个完整的前端文章详情页面。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • ssm框架整合及工程分层1.先创建一个新的project1.1配置pom.xml ... [详细]
  • 深入解析Java多线程与并发库的应用:空中网实习生面试题详解
    本文详细探讨了Java多线程与并发库的高级应用,结合空中网在挑选实习生时的面试题目,深入分析了相关技术要点和实现细节。文章通过具体的代码示例展示了如何使用Semaphore和SynchronousQueue来管理线程同步和任务调度。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 深入理解 JMeter 定时器
    本文详细介绍了JMeter中定时器的功能和使用方法,探讨了其在性能测试中的重要性,并结合实际案例解释了如何合理配置定时器以模拟真实的用户行为。文章还涵盖了定时器的执行顺序及其与其他元件的相互作用。 ... [详细]
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社区 版权所有