我知道這個標題聽起來像是十幾個其他問題的重複,很可能。但是,我已經閱讀了這些問題,並且搜索了一段時間,並沒有發現任何回答這些問題令我滿意的東西。如何在node.js中創建非IO操作同步與異步?
這可能是因爲沒有人正確回答它,在這種情況下,你應該投票給我。
這可能是因爲我很笨,不理解其他答案(更可能),在這種情況下,你應該投我一票。
語境:
我知道,在Node.js的IO操作檢測到,並在默認情況下異步運行。我的問題是關於仍然可能阻塞/運行很長時間的非IO操作。
說我有一個功能blockingfunction
與一個for
循環,做加法或whatnot(純粹的CPU週期,沒有IO),和它的很多。運行需要一分鐘或更長時間。
說我希望此功能在有人向我的服務器發送特定請求時運行。
問:
顯然,如果我明確地在我的代碼外水平調用這個循環中,一切都將阻塞,直到它完成。
我讀過的大多數建議,建議通過啓動所有我的其他處理器/服務器等第一,並通過process.nextTick
或setTimeout(blockingfunction, 0)
推遲函數的調用將其推出進入未來。
但是不會
blockingfunction1
然後只是阻止下一個周圍的執行循環?我可能是錯的,但似乎這樣做會在不阻止應用程序的情況下啓動我的其他所有內容,但是當第一次有人提出請求導致調用blockingfunction
時,只要花費完成,所有內容都會被阻止。是否將
blockingfunction
放入setTimeout
或process.nextTick
以某種方式使其與未來的操作共存而不會阻塞它們?如果不是,有沒有辦法使
blockingfunction
做到這一點,而不重寫它?其他人如何處理這個問題?我所看到的很多答案都是「只要相信你的CPU密集型產品要快,它們就會」,但這並不能令人滿意。
缺席線程(在這裏我可以保證的
blockingfunction
執行將與任何其他人是怎麼回事的執行交織),要我重新寫CPU密集型/耗時循環使用process.nextTick
執行固定的,保證快速的迭代次數?