GoWeb服务器请求生成自己的goroutine?

2024-09-26 22:43:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道goroutine和go web服务器在请求到达时是如何工作的:

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

在这个守则中

  1. /的每个请求都调用handler。这是否意味着每个请求都生成自己的goroutine?或者它会产生自己的process或{}?有没有关于这些请求如何获得自己的goroutine的文档?

  2. 其他语言如何处理此请求?例如,Python flask是否为每个请求启动自己的进程?

谢谢


Tags: 服务器webhttpurlgorequesthihandler
1条回答
网友
1楼 · 发布于 2024-09-26 22:43:25

Go的HTTP服务器(在net/http)根据http://golang.org/pkg/net/http/#Server.Serve的文档为每个请求生成一个goroutine(而不是一个线程)-

Serve accepts incoming connections on the Listener l, creating a new service goroutine for each. The service goroutines read requests and then call srv.Handler to reply to them.

其他语言以多种方式处理此问题,包括:

  • 基于事件的体系结构节点.js1
  • 多个进程和/或线程(或两个),其中“管理器”根据阻塞的内容(和没有阻塞的内容)在活动线程之间切换

我建议阅读https://www.digitalocean.com/community/tutorials/a-comparison-of-rack-web-servers-for-ruby-web-applications以了解一些RubyWeb服务器是如何工作的(包括上面的方法),而{a4}则是Python的例子,这应该能给我们一些启示。在

相关问题 更多 >

    热门问题