nodejs中的鎖——async-lock解析

概數

async-lock的npm地址

https://www.npmjs.com/package...

爲什麼是async-lock?

因爲我見其下載量比較大(在我發現的所有類似庫中是最大的)且最近更新時間較近。

場景

  1. 在異步函數中,由於存在異步操作,對此函數的A,B兩次執行會出現結束次序不可控。即A先執行,卻比B後退出函數。
  2. 對於數據庫的操作,有時會將select的值進行一系列業務變化後重新update至數據庫。就比如簡單的計數器,0開始計數,假設由於業務原因,
    必須在代碼中進行+1操作。則A讀取數據庫進入異步執行,此時B也開始執行讀取數據庫的代碼,最終後造成兩次執行後計數器只加了1。

此時便需要鎖機制,類似於Java中的synchronized或者lock。執行同一段代碼時,添加相同的key,則發現此key正在使用,則直接放入此key的待執行數組。

async-lock原理

AsyncLock類:

  • queues:用於存儲所有的待執行函數,格式爲:{key: [function, function]}
  • acquire(key, fn):

    • key:需要上鎖的名稱,即queues中的key
    • fn:爲需要執行的函數。操作即將fn添加到queues[key]對應的數組中。若queues無此key字段,則將起值置[]後直接執行。

當key對應函數執行完畢後,會檢查queues中對應key值數組是否爲空,爲空則執行delete queues[key],否則繼續執行下一個待執行函數。

其餘使用細節就 略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章