在刷校招面试题的时候看到三太子的秒杀系统设计,所以就想自己写一个单机版的玩玩
然后突然发现貌似不用redis也是可以滴🤔
本人菜🐔,要是存在什么问题欢迎提出
代码如下
func Shop(num int) (func() bool, chan chan bool) {
c := make(chan chan bool)
go myredis(num, c)
return func() bool {
ok := make(chan bool)
defer close(ok)
c <- ok
return <-ok
}, c
}
func myredis(num int, c chan chan bool) {
for n := range c {
if num > 0 {
num--
n <- true
} else {
n <- false
}
}
}
测试了一下貌似10w没问题
func main() {
shop, c := myRedis.Shop(100000)
for i := 0; i < 1000000; i++ {
go shop()
}
time.Sleep(time.Second)
close(c)
}