当大部分IO都是阻塞操作时,协程模型是不是就相当于多线程模型

Velpro · 2020-10-17 12:04:57 · 1316 次点击

协程就是用户态线程ULT,但并不是每个阻塞的连接需要一个内核支持线程KST,网络连接和线程,包括ULT和KST没有必然的关系,网络连接在Linux中都是IO,而IO有对应的IO模型,Linux环境下Golang选用epoll作为IO多路复用模型实现,Windows环境下Golang选用Select作为IO多路复用模型,具体可以看Go语言设计与实现 - 网络轮询器

Golang的多线程模型实现是类似M:N模型,但KST与ULT中间还夹着一层Process,也就是P,其中有KST只需要负责Process,然后由Process负责调度ULT

#1
更多评论

“并不是每个阻塞的连接需要一个内核支持线程KST”,什么样的阻塞连接是需要内核线程支持的

#2

典型的是以阻塞IO为IO模型实现的编程

#3