节点线程是否是模拟循环的错误位置?

时间:2013-01-30 01:07:55

标签: multithreading node.js asynchronous simulation

假设有一个天气模拟器生成/计算弥补天气,每隔0.5秒就会触发一次setInterval并运行一系列计算,以使读数和处理数据具有人类可读性。

然后它会通过套接字将相关数据发送到登录方,也许只有在数据实际发生变化时才会触发。

那么在子进程中自行运行天气模拟/生成器并将I / O保留在节点的单线程中会更好吗?

或者,这会产生锁定要求吗?

2 个答案:

答案 0 :(得分:1)

我认为应该引导你的原则是关注点的分离。您的node.js服务器是通信管道。你的天气模拟器很简单。对其中一个进行的更改不太可能涉及另一个。这也是一个更具伸缩性的选择,如果您的天气模拟器稍后变重,或者您开始​​获得的用户数量超出您的预期。

如果网络客户端可以,我相信他们会想直接订阅天气事件提要,但不要让你误以为你应该用模拟器混淆网箱。

答案 1 :(得分:0)

如果计算量很大,我强烈建议您将它们作为子进程运行,并保持node.js事件循环响应。如果您收听孩子标准输出数据并完成事件数据,您可以在数据可用时立即发送。

确保使用异步读取和写入,这样就不会开始阻止事情,也不必担心锁定。