nodejs 并发情况下如何保证同一时间只有1个线程修改共享数据
发布于 7 年前 作者 malphi 9172 次浏览 最后一次编辑是 5 年前 来自 问答

标题有点绕,举个例子: 内存中有个数组,A B线程同时要对其修改。 在java中处理很简单,加个锁即可:synchronized(array){…} ,这样就能保证1个时间只有一个线程在修改这个数据; nodejs中如何实现类似情况呢?

9 回复

使用redis咯

node 是单线程在并发下也是单线程 处理callback

2楼正解。多进程1楼正解。也可以指定某个进程为主进程,其它进程要修改这个参数去调用主进程进行修改。node.js 在使用层面上不存在也不需要锁

可以简单实现 spinlock ,共享变量,然后spin等待

楼主多虑了, nodejs单进程里主逻辑代码都在同一个线程,所以,不用考虑内存同步问题。

@sioncheng 考虑另外一个情况,1写,2读,异步写还没完,2读的是旧数据,这个可能发生吧。类似db脏读问题 自豪地采用 CNodeJS ionic

单进程单线程不用考虑资源竞争~

回调的概念是上一个没有执行完是不会执行下一个的,所以1写2读,没写完是不可能做读的。除非这两个操作是同步,并没有回调嵌套关系

@malphi NodeJS是event loop加异步I/O来实现IO高并发的,Node.js keeps a single thread for your code… (http://blog.csdn.net/macyang/article/details/6746317) ,我们的业务逻辑代码永远只会在同一个不变的线程里执行,不需要考虑内存同步。1写,2读,不会出现func1执行到一部分然后线程又去执行func2的,而是每个function独立执行完成。

回到顶部