node.js-EventEmitter与Buffer

首先说一下异步编程:

传统的同步编程是一种请求响应模型,调用一个方法,等待其响应返回.;异步编程就是要重新考虑是否需要响应的问题,也就是缩小需要响应的地方。因为越快获得响应,就是越同步化,顺序化,事务化,性能差化。

通俗的讲,传统的同步编程,需要你的代码一行接着一行的一步步执行,也就是说假如你的代码在某一行或者某几行需要执行大量的计算,这时同步编程自然需要先执行完后再往下走,自然就造成了阻塞,而异步编程很好的缓解了这个问题,通常来说,我们用到多线程来实现异步。

node.js异步编程的直接体现是回调,即在执行需要大量计算的同时,代码继续向下执行,当大量的计算完成时,会将其内容作为回调函数的参数返回来实现异步。

1.EventEmitter类

events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。通俗的讲就是为事件写回调函数来实现异步编程,EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。

你可以创建一个 EventEmitter类,在需要触发事件的时候,emit 你想要的事件,然后在其他的代码中,监听这个事件进行处理。emit方法可以触发多个同样的事件。

举个例子,写一个每秒记录一次的计时器,使用node.js注册一个用户自定义事件,然后再使用Node.js发射这个自定义事件


node.js-EventEmitter与Buffer_第1张图片
代码


node.js-EventEmitter与Buffer_第2张图片
执行情况

2.Buffer(缓冲区)

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。

buffer著名的8KB载体,举个例子好比,node把一幢大房子分成很多小房间,每个房间能容纳8个人,为了保证房间的充分使用,只有当一个房间塞满8个人后才会去开新的房间,但是当一次性有多个人来入住,node会保证要把这些人放到一个房间中,比如当前房间A有4个人住,但是一下子来了5个人,所以node不得不新开一间房间B,把这5个人安顿下来,此时又来了4个人,发现5个人的B房间也容纳不下了,只能再开一间房间C了,这样所有人都安顿下来了。但是之前的两间房A和B都各自浪费了4个和3个位置,而房间C就成为了当前的房间。

具体点说就是当我们实例化一个新的Buffer类,会根据实例化时的大小去申请内存空间,如果需要的空间小于8KB,则会多一次判定,判定当前的8KB载体剩余容量是否够新的buffer实例,如果够用,则将新的buffer实例保存在当前的8KB载体中,并且更新剩余的空间。


node.js-EventEmitter与Buffer_第3张图片

你可能感兴趣的:(node.js-EventEmitter与Buffer)