go - 是否有非阻塞 http 客户端?

标签 go

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




许多语言都有自己的高级非阻塞 HTTP 客户端,例如 python 的 aiohttp。即,它们发出 HTTP 请求;不要等待响应;当响应到达时,他们会进行某种回调。

我的问题是

  • 有一个 Go 包吗?
  • 或者我们只是创建一个使用普通 HTTP 客户端的 goroutine?
  • 哪种方式更好?
  • 最佳答案

    其他语言具有此类功能,因为当它们阻塞等待请求时,它们会阻塞它们正在使用的线程。 Java、Python 或 NodeJS 就是这种情况。因此,为了使它们有用,开发人员需要使用回调来实现这种长期存在的阻塞操作。其根本原因是使用了下面的 C 库,它阻塞了输入输出操作上的线程。

    Go 不使用 C 库(仅在某些情况下,但可以关闭)并自行进行系统调用。执行此操作时,执行当前 goroutine 的线程将其停放并执行另一个 goroutine。因此,您可以拥有大量阻塞的 goroutine 而不会耗尽线程。 Goroutines 在内存方面很便宜,线程是操作系统实体。

    在 Go 中使用 goroutine 更好。由于上述原因,不需要创建异步客户端。

    为了在 Java 中进行比较,您很快就会得到多个线程。下一步是将它们集中起来,因为它们的成本很高。池化意味着限制并发。

    关于go - 是否有非阻塞 http 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59421516/

    相关文章:

    go - 简单的 golang IRC bot 不断超时

    forms - Golang html GET 表单方法值未被填充

    go - 如何在golang中做Redis(redigo)lpop

    concurrency - 为什么这个程序在我的系统上终止而不是在 Playground 上?

    unit-testing - 如何只测试一项基准功能?

    mongodb - 在 Golang 的两个不同结构字段中映射 Mongo _id

    xml - 如何使用冒号解码 xml 元素

    google-app-engine - 如何配置 Google App Engine 不构建一些 Go 文件?

    go - 通过匿名结构键进行映射查找

    go - 如何在golang中进行spf记录查找和检查?