我刚刚开始使用 Node.js,我知道大多数操作必须使用回调才能实现非阻塞。我的问题与 Underscore.js 公开的方法有关。例如
_.shuffle([1, 2, 3, 4, 5, 6]);
如果没有提供回调,这是否会被视为同步代码?考虑一个大列表来洗牌。
尝试掌握哪些库可以与 Node 一起使用,而不影响使用 Node 的基础知识。
谢谢!
最佳答案
Node 是单线程的,因此需要完成的任何工作最终都将由该线程完成。 Node 的异步特性意味着它总是试图让自己忙于工作,而不是等待数据返回(例如数据库调用、网络调用、磁盘访问等)。当您阅读有关确保代码异步的内容时,这些就是人们正在谈论的操作类型。
对一堆数字进行洗牌是必须由单个 Node 线程完成的大量工作,因此这种类型的调用async
不会执行任何操作。所以,是的,该调用是同步的,并且会阻塞线程,但确实没有替代方案(无需生成工作线程或其他 Node 进程)。如果您需要进行大量繁重的计算,这就是 Node 实际上不是最佳选择的原因之一,因为它会阻塞单个线程。 Node 最擅长快速执行大量短期任务。
请注意,打乱一百万个数字可能仍然比单个数据库调用更快,因此此特定操作不会对整体性能产生太大影响。如果您需要洗牌 1 亿个数字,Node 可能不是合适的平台。
关于Node.js 和 Underscore.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256789/