搜尋

首頁  >  問答  >  主體

node.js - nodejs 高并发下请求同一资源

问题描述:
举个例子,比如买票,数据库中只有一张票了,现在两个人同时购买这张票,请问nodejs是如何处理的?有人说,nodejs是单线程,不会产生此问题。那如果是利用多核多线程呢?或N台服务器,m个线程同时请求这个资源呢?感谢!

ringa_leeringa_lee2767 天前554

全部回覆(2)我來回復

  • PHPz

    PHPz2017-04-17 13:20:46

    這個問題有可能會在買每一張票的時候發生,而不僅是最後一張票。另外,Node.js 是單執行緒處理,所以單機服務不會發生類似的問題,就算是多核心也不會發生。不過如果有N台伺服器在跑使用同一個資料庫中的數據,這是多個行程在競爭資源。

    如果想簡單的解決此類問題,請為表格加鎖。如果希望有效率一點處理此類問題,需要加一些緩存,如果是高並發的情況,需要在快取層做一些初步的篩選。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:20:46

    資料是在資料庫中,高並發下的正確要依賴資料庫來解決,例如使用樂觀鎖,為資料加版本號。

    select version,data from table;
    update table set data = 1,version = version + 1 where version = X
    

    根據update回傳的affectedRows判斷是否成功,再吐給前端結果。
    node 本身只是做一個請求處理和資料庫命令的轉發,一般都是異步回調實現,單進程下也是可以並發多個相同的請求到資料庫,一般不會使用阻塞的方式去請求DB。

    回覆
    0
  • 取消回覆