nodejs08-非阻塞IO、异步、事件驱动

作者: 经纬文学 | 来源:发表于2019-11-07 18:38 被阅读0次

nodejs单线程 非阻塞I/O 事件驱动

使用之前,打开官网

java、php语言中,与每一个客户端的连接,都创建一个线程,每个线程耗费2MB左右的内存

node仅仅使用一个线程,通过非阻塞I/O 事件驱动,让nodejs宏观上并行

demo.js
var fs = require('fs')


/**
 * Q: 什么是非阻塞IO?
 * A: 非阻塞IO的目的是高并发,非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
 * 
*/
console.log(1)
fs.readFile('mock.json', 'utf8', (err,data) => {
  if (err) {
    console.log(err)
    return
  }
  console.log(2)
  console.log(data)
  console.log(3)

})
console.log(4)

// 打印顺序 1 4 2 data 3
demo2.js

下面代码打印的结果是undefined

var fs = require('fs')

function getData () {
  fs.readFile('mock.json', 'utf8', (err,data) => {
    if (err) {
      console.log(err)
      return
    }
    return data
  
  })
}


console.log(getData())
  • 回调函数处理异步
demo2.js
var fs = require('fs')

function getData (callback) {
  fs.readFile('mock.json', 'utf8', (err,data) => {
    if (err) {
      console.log(err)
      return
    }
    // return data
    callback(data)
  })
}

getData(function(data){
  console.log(data)
})


  • events模块处理异步
demo3.js
var fs = require('fs')
var events = require('events')

var EventEmitter = new events.EventEmitter()

// 监听
EventEmitter.on('send', (data)=>{
  console.log(data)
})

function getData () {
  fs.readFile('mock.json', 'utf8', (err,data) => {
    if (err) {
      console.log(err)
      return
    }
    // 发送数据
    EventEmitter.emit('send', data)
  })
}

getData()
// console.log(events)

补充

举个栗子:
早晨起床,大喊一声,今天又是元气满满的一天!
这时候,妈妈问你
"宝贝,饿了吗?"
这时候的你像一个哑巴一样,啥也没说,妈妈在心中默念,亲生的--亲生的--亲生的--
不知过了多久,妈妈又问你
“宝贝,饿了吗?”如果就目前为止来看的话,你确实是个哑巴
世界上最爱的你的人,还是你的妈妈呀,
"宝贝,饿了吗?"
“饿了”终于,铁棒成针,水滴石穿。
"知道厨房在哪吧?饿了就快点做饭,我早就饿了"。你妈妈最终还是你妈妈

非阻塞I/O

"宝贝饿了吗?"
妈妈问完,就出去打麻将了,过了许久,你感觉饿了,,给妈妈打了个电话
"妈妈,我饿了"
“吃!胡了!哎,好勒,忙着呢,你自己吃点吧”
嘟嘟嘟嘟……

异步I/O

众所周知,非阻塞IO、阻塞IO等都是同步IO,真正意义上的异步IO只有异步I/O模型

相关文章

  • 整理一些遇到的问题

    常见的IO模型 单线程阻塞 多线程阻塞 多进程阻塞 非阻塞轮询 事件驱动IO 信号驱动式IO 异步IO(指的是使用...

  • nodejs08-非阻塞IO、异步、事件驱动

    nodejs单线程 非阻塞I/O 事件驱动 使用之前,打开官网 java、php语言中,与每一个客户端的连接,都...

  • netty

    netty 高性能,异步,事件驱动库 Unix io模型 阻塞io 非阻塞io,netty主要就是基于epoll的...

  • Java8并发编程(使用CompletableFuture)

    java8异步处理 非阻塞IO/异步/并行 使用场景 scala事件驱动 Java CompletableFutu...

  • 初识node

    Node 基础 浏览器工作原理(Node优势):事件驱动(事件轮询)和非阻塞IO处理(异步IO)传统服务器是同步I...

  • Java IO快速入门

    网络IO实现方式分为BIO(阻塞IO)、线程池伪异步IO、NIO(非阻塞IO)、AIO(异步非阻塞IO); 异步、...

  • 四、高性能IO模型浅析

    按照《Unix网络编程》的划分,IO模型可以分为:阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO;按照PO...

  • 五种 IO 模型

    五种 IO 模型 参考链接 一共有五种 IO 模型 阻塞 IO 非阻塞 IO 多路复用 IO 信号驱动 IO 异步...

  • 阻塞与非阻塞,同步与非同步,你真的懂吗?

    按照《Unix网络编程》的划分,IO模型可以分为:阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO。按照PO...

  • IO模型

    阻塞IO 非阻塞IO 多路复用IO 信号驱动IO 异步IO 吃午饭之阻塞IO 下单之后,排队等在取餐口等待厨师做好...

网友评论

    本文标题:nodejs08-非阻塞IO、异步、事件驱动

    本文链接:https://www.haomeiwen.com/subject/dyovbctx.html