关于php解决并发的一些疑惑
首先 并发我是这样理解的:
2 个人同时下单, 库存只有 1, 那么肯定有一个人无法抢到。也就是说, 库存只会减 1, 订单也只会生成一条。
后来我用 Jmemter 模拟 1000 人同时操作, 发现订单确实只有一个, 而且库存也没有负数, 但是我并没有做什么锁啊或者队列这些一谈到并发就会涉及到的东西。
`$a` 是查询到的库存
```
$b = $a-1;

if($b>=0){
    生成订单
    修改库存
}
```
如果没有 `if` 判断, 确实会负。但是如果加了这个 `if` 判断就库存只减少 1, 订单只有一条
那么我的问题来了, 加个 `if` 判断就能解决并发? 还是说实际上真正要处理的是模拟测试后出现的错误率 (Jmemter, 模拟 1000 人, error:59.5%), 或者其他? 
请解答, 如果我的思路有错误, 也请毫不留情
你说的订单问题，其实是：高并发场景下，如何正确扣减库存的问题
`if($b>=0)` 这样的判断，在高并发的场景下并不使用，因为这样的业务逻辑判断并不是 `原子操作`，所以存在 `脏读` 的可能。
例如：
由两个请求同时到达 `服务端`（分别名为：`p1`, `p2`），`p1` 先取到了数据，走到了 `if` 判断，
此时 `p2` 也取到了数据，但是 `p1` 还没有更新数据库，所以 `p2` 取到的数据跟 `p1` 是一样的，所以，`p1` `p2` 得到的 `$b` 值是一样的， `p2` 也可以通过 `if` 条件，但是这两个请求只扣减了一次存库。
如何解决这个问题呢？
- 加锁；
- 队列：改并行为串行，依次扣减；
- 操作转换为原子操作；

加锁；
队列：改并行为串行，依次扣减；
操作转换为原子操作；
不光是数据库操作，高并发场景下，还可能会面对什么问题呢：
- 单点问题（当然 非刚并发场景也会面临这个问题，但是高并发场景，此问题尤为突出）
- 最大连接数问题，eg. `web 服务器` `数据库` ...
- 数据安全问题，eg. `脏读` `重复操作`

单点问题（当然 非刚并发场景也会面临这个问题，但是高并发场景，此问题尤为突出）
最大连接数问题，eg. `web 服务器` `数据库` ...
数据安全问题，eg. `脏读` `重复操作`