gpt4 book ai didi

python - Golang 中的并发服务器

转载 作者:IT王子 更新时间:2023-10-29 02:32:15 26 4
gpt4 key购买 nike

首先,我必须承认我是一般并发方面的初学者,但最近阅读了很多相关内容。因为我听说 Golang 在这方面很强。我想问一下(并发)服务器是如何用这种语言编写的。

我的意思是,如何编写可以同时处理多个请求/连接的服务器有不同的方法。你可以使用线程,异步编程(例如 Python 中的 async/asyncio),在 Golang 中有 goroutines,它或多或少是一个轻量级线程。

但是,当使用 Python 和 async/asyncio 时,您可以拥有一个进程和一个线程,并且它能够处理并发。但是,代码很复杂(至少对没有任何背景的我来说)。

我的问题:Golang写一个并发服务器要走什么路?每个连接只有一个新的 goroutine 还是有任何异步方式?什么是“最佳实践”?

我的意思是在一个高使用率的服务器上拥有大量的 goroutines 是不是很昂贵?如何用 Golang 编写一个好的服务器?

最佳答案

对于初学者来说,最好的开始方式就是使用 https://golang.org/pkg/net/http/并只编写 http 处理程序。您不需要初始化 Go 例程 - http.Server会为你做的。

代码将直接阻塞调用。您无需在此阶段考虑并发性,因为 Go 会为您完成。例如当你打电话时

record, err := someDb.GetRecordByID(123)

实际上它是一个异步调用,它会阻塞当前流,但会释放线程给其他 Go 例程。一旦数据返回并且线程(可能与之前的线程不同)可用,它将继续流动。

如果您需要在 1 个 HTTP 请求中执行并发调用,您可以启动 Go 例程。但是留到以后再做 Go lang tour on concurrency首先。

如果您确实需要针对 HTTP 请求的高负载解决方案,请考虑使用 https://github.com/valyala/fasthttp而不是标准的 http 包。

关于python - Golang 中的并发服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46340440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com