图中的标注部分是我关于循环等待的理解,请老师指点下

来源:16-2 简单调度器

LikeAShadow

2018-04-18

http://img.mukewang.com/szimg/5ad7157300015b1411890753.jpg

写回答

3回答

ccmouse

2018-04-18

同学理解的很对。的确是圈出的这几句的确是这样循环等待的关系,里面也考虑了requet的数量。值得提出的是,这个问题通常是无法通过增加worker的数量来解决的,只能暂时缓解。

0
3
ccmouse
回复
慕前端4885459
这是一个基本的死锁问题。虽然这里没有用到锁,但原理一样。 死锁的四个必要条件   1、互斥条件:一个资源每次只能被一个进程使用;   2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;   3、不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺;   4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系; 互斥和不剥夺一般无法破除。循环等待正如图上已经形成。另一方面收发在一个goroutine里实际上造成了请求保持,就是您所说的。后面改成select也是主要对请求保持进行破解
2019-11-16
共3条回复

晓之海绵宝宝

2018-05-28

举个例子:

以前是大家排队上厕所,排队的人把门都堵了,人家上完厕所想出来出不来,然后大家也进不去。现在每个人都在两边站着(这就是并发),排队的路没人堵了,人家能出来,大家才能进去嘛。

你要是有钱,也能开一排厕所(开n个worker),来了都有厕所上,也不会出现堵门的情况了。




3
1
ccmouse
这个解释比我的好多了
2018-05-28
共1条回复

王子虾2021

2022-02-06

    确实这里的逻辑非常绕。。

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程