同样的写法,swoole死锁而golang却没有?

golang
同样的写法,swoole死锁而golang却没有?

swoole
同样的写法,swoole死锁而golang却没有?

附言 1  ·  3年前

golang多线程模型的协程
swoole单线程模型的协程

最佳答案

应为swoole的协程阻塞后会挂起让给其他协程运行,但是又无法恢复运行,所以永远卡死,swoole的协程是单协程,同一时间只有一个协程能运行,go是多核协程,协程2获取不到锁之后,协程1是可以恢复运行的

3年前 评论
gdpulzn (楼主) 3年前
renxiaotu 3年前
讨论数量: 5

应为swoole的协程阻塞后会挂起让给其他协程运行,但是又无法恢复运行,所以永远卡死,swoole的协程是单协程,同一时间只有一个协程能运行,go是多核协程,协程2获取不到锁之后,协程1是可以恢复运行的

3年前 评论
gdpulzn (楼主) 3年前
renxiaotu 3年前

其实就是sync包的调用阻塞了,导致协程让出,恢复上一个协程,而swoolelock拿不到锁会一直等到,不会让出协程

  1. sync
  2. channel
  3. 网络请求传输
  4. 读写文件和系统调用
3年前 评论

swoole\lock是进程锁,不是用在这里的,wiki.swoole.com/#/memory/lock

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!