nodejs 高并发下请求同一资源

问题描述:
举个例子,比如买票,数据库中只有一张票了,现在两个人同时购买这张票,请问nodejs是如何处理的?有人说,nodejs是单线程,不会产生此问题。那如果是利用多核多线程呢?或N台服务器,m个线程同时请求这个资源呢?感谢!

阅读 7.1k
2 个回答

这个问题有可能会在买每一张票的时候发生,而不仅是最后一张票。另外,Node.js 是单线程处理,所以单机服务不会发生类似的问题,就算是多核也不会发生。不过如果有N台服务器在跑使用同一个数据库中的数据,这是多个进程在竞争资源。

如果想简单的解决此类问题,给表加锁。如果希望高效一点处理此类问题,需要加一些缓存,如果是高并发的情况,需要在缓存层做一些初步的筛选。

数据是在数据库中,高并发下的正确要依靠数据库来解决,比如使用乐观锁,给数据加版本号。

select version,data from table;
update table set data = 1,version = version + 1 where version = X

根据update返回的affectedRows判断是否成功,再吐给前端结果。
node 本身只是做一个请求处理和数据库命令的转发,一般都是异步回调实现,单进程下也是可以并发多个相同的请求到数据库,一般不会使用阻塞的方式去请求DB。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏