Node js 真的有協程嗎?

時間 2021-06-02 09:32:32

1樓:原子筆

聽說過物件導向的上下文麼?誰說上下文一定只能存在於暫存器和棧上呢?

把棧指標暫存器換成this指標,這叫做無棧協程~~再配合點語法糖,讓訪問物件成員如同訪問區域性變數一樣(連主流編譯語言都支援省略this直接訪問成員),這不是很平凡的操作麼~~

有棧協程:用(e)rsp棧暫存器來索引區域性變數,上下文是協程私有的棧。 訪問上下文資料也就是區域性變數的時候,我們無需顯式的使用棧暫存器+偏移量來訪問,而是直接訪問變數名。

無棧協程:用this來索引物件的成員變數,上下文就是物件自己。訪問上下文資料也就是成員變數的時候,我們無需顯式的使用this+成員偏移量(或者變數名)來訪問,而是直接訪問變數名。

兩種協程訪問的上下文中的資料,生命週期都大於函式的返回:棧的生命週期晚於函式的返回,this物件的生命週期晚於函式的返回。後者更晚而且往往需要手工銷毀。

2樓:linuxb

除去那些語法糖,還是要看generator底層是不是協程實現,有沒有context的儲存重建,其實,node8那回引擎就原生支援了+_+

3樓:

你都編譯成es5了,es5當然沒有協成,es6開始就有generate了,就能把async await編譯過去直到es7有原生async,原生搞的都是底層cpp實現的,當然是得做到不浪費執行緒才會給上層提供這功能

4樓:「已登出」

node的協程是libuv實現的,node上層不可見,協程為node自己去管理和調控,上層只作為啟發式的,對work不可見

5樓:沙包妖夢

node和Python的協程是一回事。他們可以實現攜程(而且不需要生成器),但並不是說某個特性就是協程。生成器就是生成器。

Golang 開發需要協程池嗎?

pefish 基本不需要吧。Golang中協程的誕生就是為了消滅執行緒的排程管理造成的效能損失,辦法就是執行緒池。Golang中的協程已經變得很輕量了,如果再去弄個協程池,那麼同樣協程池中也有任務 加入稱為協協程吧 需要被排程,到時候你是不是又要弄個 協協程池 呢,你弄的協協程的排程效能可能還不如協...

Node js 真的有高併發優勢麼?

陳連傑 express底層是connect,connect預設的靜態處理是static外掛程式,static直接封裝send模組,send模組核心功能呼叫了node的pipe把檔案pipe到res,順便處理一些httpheader.然後最核心的是send預設是沒有cache的,也沒有zip。如果測試...

協管員和輔警真的有必要僱傭嗎?

李知途 警民比例世界平均水平,千分之2.8,中國是千分之1.3。按照這個標準我們還差將近一半多一點。這麼少的警力,這麼好的治安水平可以了。至於他們的表現,作風,會慢慢改變的,現在很多地方,協警也要求有學歷要求,面向社會統一招考了。這需要乙個時間過渡。社會文明治理是各個方面努力的結果,不能一蹴而就,也...