Performance epoll集成的优势

Performance epoll集成的优势,performance,go,epoll,Performance,Go,Epoll,在一次工作面试中,我不得不回答这个问题——在Go中使用epoll集成/实现有哪些优势 我只知道epoll可以做什么,而且任何描述符的复杂性都是O(1),但我不知道为什么Go比其他语言更好 我发现了这个分支,有人说,可能是因为Go不使用堆栈切换。这对我来说很难理解。程序的哪个部分不使用堆栈切换?每个goroutine都有自己的堆栈。这并不是netpoller集成本身使Go在其领域变得强大,而是集成的方式:在Go中,netpoller不是作为库固定的,而是紧密集成到运行时和调度程序中(决定运行哪个g

在一次工作面试中,我不得不回答这个问题——在Go中使用epoll集成/实现有哪些优势

我只知道epoll可以做什么,而且任何描述符的复杂性都是O(1),但我不知道为什么Go比其他语言更好


我发现了这个分支,有人说,可能是因为Go不使用堆栈切换。这对我来说很难理解。程序的哪个部分不使用堆栈切换?每个goroutine都有自己的堆栈。

这并不是netpoller集成本身使Go在其领域变得强大,而是集成的方式:在Go中,netpoller不是作为库固定的,而是紧密集成到运行时和调度程序中(决定运行哪个goroutine以及何时运行)

执行goroutines的超轻量级线程与netpoller的耦合允许进行无回调编程。也就是说,一旦您的服务连接到另一个客户端,您只需将此连接交给goroutine,goroutine只从中读取数据(并将其响应流写入)。当goroutine想要读取数据时,一旦没有可用数据,调度器就会暂停goroutine,并在netpoller报告有可用数据时取消阻止它;当goroutine想要写入数据但发送缓冲区已满时,也会发生同样的情况

综上所述,Go中的netpoller与goroutine调度器交织在一起,goroutine调度器允许goroutine透明地等待数据可用性,而无需程序员显式地编写事件循环和回调代码,或处理“未来”和“承诺”,它们仅仅是包装在漂亮对象中的回调


我请你阅读这篇文章,它用更漂亮的词解释了这一点。

这并不是netpoller集成本身使Go在其领域变得强大,而是集成的方式:在Go中,netpoller不是作为库固定的,而是紧密集成到运行时和调度程序中(决定运行哪个goroutine以及何时运行)

执行goroutines的超轻量级线程与netpoller的耦合允许进行无回调编程。也就是说,一旦您的服务连接到另一个客户端,您只需将此连接交给goroutine,goroutine只需从中读取数据(并将其响应流写入)。当goroutine想要读取数据时,如果没有可用数据,则当netpoller报告有可用数据时,计划程序将暂停goroutine并取消阻止它;当goroutine想要写入数据但发送缓冲区已满时,也会发生同样的情况

综上所述,Go中的netpoller与goroutine调度器交织在一起,goroutine调度器允许goroutine透明地等待数据可用性,而无需程序员显式地编写事件循环和回调代码,或处理“未来”和“承诺”,它们仅仅是包装在漂亮对象中的回调


我请您阅读这篇文章,它用更漂亮的词解释了这一点。

该评论指的是一个单线程用例,在这种情况下,没有堆栈切换,因为只有一个goroutine(无需切换).该评论指的是一个单线程用例,在这种情况下,没有堆栈切换,因为只有一个goroutine(无需切换)。