1.uint 1 - uint2 = ?? ,为啥
答案:127 ,go 是强类型语言,uint 计算的类型也肯定是uint 类型
1-2相当于0-1,计算机里面的减法运算其实都是加法进行编译的,相当于0加-1,负数的计算都会转换成补码,-1的补码就是所有位数都是1,以无符号的类型去识别的话,就会转换成当前类型的最大值
2. Mutex几种模式
1. 正常模式
当前的mutex只有一个goruntine来获取,那么没有竞争,直接返回。
新的goruntine进来,如果当前mutex已经被获取了,则该goruntine进入一个先入先出的waiter队列,
在mutex被释放后,waiter按照先进先出的方式获取锁。
该goruntine会处于自旋状态,持续的探测锁的状态,
自旋过程中能抢到锁,一定意味着同一时刻有协程释放了锁。我们知道释放锁时,如果发现有阻塞等待的协程,那么还会释放一个信号量来唤醒一个等待协程,被唤醒的协程得到 CPU 后开始运行,此时发现锁已经被抢占了,自己只好再次阻塞,不过阻塞前会判断,自上次阻塞到本次阻塞经过了多长时间,如果超过 1ms,则会将 Mutex 标记为 Starving模式,然后阻塞。
2.饥饿模式下,
不会启动自旋过程,一旦有协程释放了锁,一定会唤醒协程,被唤醒的协程将成功获取锁,同时会把等待计数减 1。
3. http1.1与http2的区别
解释: https://zhuanlan.zhihu.com/p/85093818