nodejs 关于并发安全的问题

2017-09-06 14:03:08 +08:00
 twogoods

nodejs 里有锁的概念吗?比如扣库存这个场景,库存只有 1 了,两个用户同时请求,如何保证只有一个成功?

4973 次点击
所在节点    程序员
7 条回复
laoyur
2017-09-06 14:08:46 +08:00
你这个案例,为何不用数据库自己的锁机制呢
Srar
2017-09-06 14:10:48 +08:00
这个属于数据库原子性操作问题...和 NodeJS 无关, 如果是在 NodeJS 进程内处理并且是在一个事件内的话修改变量是原子操作
twogoods
2017-09-06 14:34:04 +08:00
@laoyur 可能例子举的不恰当,我是好奇语言层面上如何处理并发安全这个问题
@Srar 没太理解您的意思,如果数据库层面没考虑这个问题,是不是两个请求进来最后库存变-1 了?
fds
2017-09-06 14:41:20 +08:00
你先搞清楚这个数据是存在哪里。数据库有锁、事务的概念。node.js 单进程不需要锁。多进程之间依赖外部服务处理同步问题。
Srar
2017-09-06 15:02:11 +08:00
@twogoods 理论上来说, 是的.
domty
2017-09-06 16:15:19 +08:00
异步是相对于同步来说的。
锁这种东西是并发里用到的。

并发的线程竞争资源竞争用锁,和这个并发线程是同步实现的还是异步实现的没有区别。
TangMonk
2017-09-06 16:26:23 +08:00
1. 用数据库,比如说 PostgreSQL:

CREATE TABLE products (
price integer CHECK (price > 0)
);

2. 用 redis

nodejs 有个包:async-lock

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX