流是對資料生產,消費的一種抽象,今天先分析一下流基類的實現
const ee = require(
'events');
const util = require(
'util');
// 流的基類
function stream(
)// 繼承事件訂閱分發的能力
util.inherits(stream, ee)
;
流的基類只提供了乙個函式就是pipe。用於實現管道化。這個方法**比較多,分開說。
function ondata(chunk)}}
// 監聽data事件,可讀流有資料的時候,會觸發data事件
source.on(
'data', ondata)
;function ondrain()}
// 監聽drain事件,目的流可以消費資料了就會觸發該事件
dest.on(
'drain', ondrain)
;
這是管道化時流控實現的地方,主要是利用了write返回值和drain事件。
// 目的流不是標準輸出或標準錯誤,並且end不等於false
if(!dest._isstdio &&
(!options || options.end !=
= false))
// 兩個函式只會執行一次,也只會執行乙個
var didonend =
false
;function onend(
)function onclose(
)
這裡是處理源流結束和關閉後,通知目的流的邏輯。
// remove all the event listeners that were added.
function cleanup(
)function onerror(er)
} // 監聽流的error事件
source.on(
'error', onerror)
; dest.on(
'error', onerror)
; // 源流關閉或者沒有資料可讀時,清除註冊的事件
source.on(
'end', cleanup)
; source.on(
'close', cleanup)
; // 目的流關閉了也清除他註冊的事件
dest.on(
'close', cleanup)
;
這裡主要是處理了error事件和流關閉/結束/出錯時清除訂閱的事件。這就是流基類的所有邏輯。 通過原始碼分析nodejs執行緒架構
nodejs支援了程序之後,又支援了執行緒。類似瀏覽器端的web worker。因為nodejs是單執行緒的,但是底層又實現了乙個執行緒池,接著實現了程序,又實現了執行緒。一下變得混亂起來,我們要了解這些功能的實現原理,才能更好地使用他。上篇大致分析了程序的原理,這一篇來講一下執行緒的原理。只有了解...
CCTextureCache類原始碼分析 2
cctexturecache類原始碼分析 2 在cctexturecache類原始碼分析 1 中,我們分析了cctexturecache如何實現 紋理快取的,但是在分析的過程中,我們忽略了很多東西,比如ccimage類 原始碼分析 1 ccimage繼承自ccobject 2 成員變數,這些變數需要...
CCTextureCache類原始碼分析 3
cctexturecache類原始碼分析 3 1 在 1 中有提到過兩種特殊的格式,它們的處理方式和其他 格式的不同,這裡就分析一下這兩種特殊的格式的處理 對於.pvr 和 pkm 格式檔案需要特殊處理 if std string npos lowercase.find pvr else if st...