首页 > 后端开发 > Golang > 正文

HTTP 处理程序中启动的 Goroutine 是否总是在发送响应后完成?

Barbara Streisand
发布: 2024-11-25 17:27:13
原创
926 人浏览过

Will a Goroutine Launched in an HTTP Handler Always Finish After the Response is Sent?

HTTP 处理程序中的 Goroutine 执行

问题:

在提供的示例代码中,其中 goroutine 在HTTP 处理程序(HomeHandler),即使服务器返回响应后,goroutine 也会始终完成执行客户端?

示例代码:

package main

import (
    "fmt"
    "net/http"
    "time"
)

func worker() {
    fmt.Println("worker started")
    time.Sleep(time.Second * 10)
    fmt.Println("worker completed")
}

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    go worker()
    w.Write([]byte("Hello, World!"))
}

func main() {
    http.HandleFunc("/home", HomeHandler)
    http.ListenAndServe(":8081", nil)
}
登录后复制

答案:

是的,在worker中启动的goroutine将完成它的工作在所有情况下执行。

Goroutines 是 Go 程序中的轻量级线程,不受主函数或 HTTP 处理程序执行的限制。它们将继续并发运行,除非遇到错误或显式终止。在这种情况下,worker goroutine 是异步启动的,HomeHandler 函数在将响应写入客户端后立即返回。即使在处理函数返回并且服务器发送响应之后,worker Goroutine 也会继续执行,直到完成休眠 10 秒并打印完成消息的任务。

goroutine 可能无法完成的唯一场景分别是:

  • 如果 main 函数退出并终止整个程序。
  • 如果程序遇到致命错误,例如内存不足。

以上是HTTP 处理程序中启动的 Goroutine 是否总是在发送响应后完成?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板