登录
首页 >  Golang >  Go教程

http.HandleFunc注册的Handler是串行还是并发的?

来源:php

时间:2024-10-30 19:58:01 237浏览 收藏

大家好,今天本人给大家带来文章《http.HandleFunc注册的Handler是串行还是并发的?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

http.HandleFunc注册的Handler是串行还是并发的?

http.handlefunc 的 handler 执行并发性

使用 http.handlefunc 注册的 handler 在处理请求时的并发性一直是初学者关心的问题。本文将对其进行详细阐述。

问题:http.handlefunc 注册的 handler 是串行还是并发的?

答案:

http.handler 是并行执行的。

原理:

当网络服务器接收一个请求后,会按照以下顺序处理请求:

http.servemux.servehttp
↓
http.servemux.handler
↓
http.servemux.handler

其中,http.servemux.servehttp、http.servemux.handler、http.servemux.handler 的执行顺序是串行的。需要注意的是,尽管这些方法串行执行,但 http 服务器的请求处理是并发的。

当服务器调用 http.server.accept 方法接收请求时,会创建一个新的 goroutine 来处理这个请求。每个请求都会在单独的 goroutine 中处理,因此请求处理是并发的。

以下是相关的关键代码段:

// https://golang.org/src/net/http/server.go L2900
for {
    rw, err := l.Accept()
    if err != nil {
        ...
    }
    ...
    go c.serve(connCtx)
}

在 c.serve 方法中,就开始调用 http.servemux.servehttp 方法并处理请求了。

因此,http.handlefunc 注册的 handler 虽然在其内部执行是串行的,但由于请求是在不同的 goroutine 中并行处理的,因此整体上是并发的。

终于介绍完啦!小伙伴们,这篇关于《http.HandleFunc注册的Handler是串行还是并发的?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:php 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>