CNode

nodejs 并发情况下如何保证同一时间只有1个线程修改共享数据

问答
Mmalphi发布于11 年前最后回复11 年前9 回复12536 浏览0 收藏

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

查看回复

回复 (9)

B
blackjack#1·11 年前

使用redis咯

D
dayuoba#2·11 年前

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

K
klesh#3·11 年前

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

F
fantasyni#4·11 年前

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

S
sioncheng#5·11 年前

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

M
malphi#6·11 年前
引用 sioncheng楼主多虑了, nodejs单进程里主逻辑代码都在同一个线程,所以,不用考虑内存同步问题。

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

D
DoubleSpout#7·11 年前

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

H
haozxuan#8·11 年前

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

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

@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独立执行完成。

参与回复
登录后即可参与回复。登录