lolizeppelin
2019-11-01 10:07:07 +08:00
线程
一个线程跑满,就吃饱一个 cpu
N 个线程跑满对应 N 个 cpu,只要与 cpu 数量相同多线程就能吃饱 cpu
但是实际代码里会阻塞,一阻塞会自动让出 cpu, 所以在阻塞写法里,程序的线程超过 cpu 数量能提高性能
但是过多的线程数带来的上下文切换回拖慢整体
协程
通过寄存器保存代码片段,遇到阻塞(一般是 io,或者自定义的协程锁),会切换到其他代码片段
所有代码片段的入口存放一个不停排序的队列
一个循环(相当于一个线程)不停的排序这个队列,并弹出最前面的数据获取到代码片段并执行
一般只有一个主线程,由于代码片段的切换由程序自己决定,没有系统级上下文切换,性能好,缺点是单线程
所以性能最好的方式是结合多线程与协程,但是非语言级很难用一个库来实现支持多线程的协程
目前除了 go, dart (也就是 google 的 flutter 所用语言)也有多线程协程支持
我瞎鸡巴说的...我没写过 go 哈哈哈哈哈哈