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

 (未完待续)

推荐阅读
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 探讨如何通过编程技术实现100个并发连接,解决线程创建顺序问题,并提供高效的并发测试方案。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
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社区 版权所有