[英]Node.js - Maximum time recommended in synchronous operations
同步插件將阻止Node.js的事件循環。 但也許,存在阻止事件循環的“標准”限制。
var results = addon.my_function(parameters); //consumes 2ms
我的功能耗時2毫秒。 此刻,我想知道將其改為異步方式的工作是否能夠帶來最終的表現。
您可能知道node.js有一個並發模型,它只能解決IO綁定任務的並發性問題。 任何未分解的串行任務都會暫停該持續時間的事件循環。 可以實現例程來打破這個任務,但它只包含特定的范例。 如果您正在進行一項需要花費大量時間的操作,那么您應該研究並行性。 如果你正在處理一個數據集,比如一個數組或一個文件,你可以實現一個遞歸函數來替換一個循環,當你遞歸而不是直接調用你的函數時你可以用setTimeout
來延遲它,這樣你就可以恢復了你的eventloop,以避免停止太長時間(發生超時)。
我不能給你一個確定的時間,同步任務將被視為“太長”。 這真的取決於。 有太多因素。 這項任務發生的頻率確實有所不同。
處理這些任務有多種方法:
如果你的進程花費了2ms,那么你可能只是讓事件循環處理它。 阻止事件循環2ms並不是什么大問題。 如果這些類型的任務頻繁(每秒多次),那么您可能需要考慮卸載到工作者或可能創建某種隊列或某種方法來限制一次處理的數量。 否則你可能會遇到響應緩慢的問題。 現在我認為除非這是一項非常常見的任務,否則你會沒事的。
如果您的任務是IO綁定的,那么將其更改為異步的工作應該是微不足道的,因為nodejs是從這個范例開始構建的。 如果您不盡可能不使用異步方法,這是不好的做法。 雖然這只與IO有關。 如果您的任務不是從某個源讀取/寫入數據,那么異步方法對您來說絕對沒有任何作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.