并发问题的处理

1、并行

并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的。

2、并发

并发:指的是任务数多于cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)。

3、并发的优点

  • 响应速度快:同时处理多个请求,响应时间较快。复杂的业务操作可以拆分为多个线程去执行加快了速度。
  • 设计在某些情况下更简单设计:程序在某些情况下,可以更简单更高效,选择性更多
  • 资源利用率好:CPU可以在空闲时可进行复用,例如在等磁盘和网络IO的时候,做一些其他的事情。
  • 提高系统性能

4、并发的缺点

  • 安全性:多个线程执行相同的程序,可能会出现线程安全的问题,也就是与实际期望不符的结果
  • 活跃性:某个操作执行不下去,可能会发生死锁和饥饿等问题。
  • 性能:线程过多,CPU频繁切换,增加了调度时间。线程过多会消耗过多的内存。

5、并发的问题

假如一件商品的库存只有5件,A用户买5个,B用户买5个,两个用户同时发起对同一个商品的下单请求,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常。

6、解决并发的方法

(1)乐观锁
乐观锁并不是真实存在的锁,而是在更新的时候判断此时的库存是否是之前查询出的库存,如果相同,表示没人修改,可以更新库存,否则表示别人抢过资源,不再执行库存更新。

并发量低的时候使用乐观锁,但乐观锁循环耗费时间。
(2)悲观锁
当查询某条记录时,即让数据库为该记录加锁,锁住记录后别人无法操作。

并发量高的时候使用悲观锁,但加锁消耗资源,并且容易造成死锁。
(3)任务队列
将下单的逻辑放到任务队列中(如celery),将并行转为串行,所有人排队下单。比如开启只有一个进程的Celery,一个订单一个订单的处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值