go语言怎么做的连接复用,怎么支持的并发请求,go的netpoll是怎么实现的像阻塞read一样去使用底层的非阻塞read

本文阅读 2 分钟
首页 golang 正文

题目序号:(56)

题目来源:字节跳动

频次:1

答案1:(栾龙生)

IO多路复用的netpoll模型

  1. go语言怎么做的连接复用

    go语言中IO多路复用使用netpool模型

    netpoll本质上是对 I/O 多路复用技术的封装,所以自然也是和epoll一样脱离不了下面几步:

    1. netpoll创建及其初始化;
    2. 向netpoll中加入待监控的任务;
    3. 从netpoll获取触发的事件;

    在go中对epoll提供的三个函数进行了封装

    func netpollinit()
    func netpollopen(fd uintptr, pd *pollDesc) int32
    func netpoll(delay int64) gList

    netpollinit函数负责初始化netpoll;

    netpollopen负责监听文件描述符上的事件;

    netpoll会阻塞等待返回一组已经准备就绪的 Goroutine;

  2. go语言怎么支持的并发请求

    Go中有goroutine,所以可以采用多协程来解决并发问题。accept连接后,将连接丢给goroutine处理后续的读写操作。在开发者看到的这个goroutine中业务逻辑是同步的,也不用考虑IO是否阻塞。

本文来自投稿,不代表本站立场,如若转载,请注明出处:
syncpool的实现原理
« 上一篇 09-17
问了sync.Map(我说我对sync.Pool比较熟,就说Pool了)
下一篇 » 09-17

发表评论

发表评论