关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。
想改进这个问题?将问题更新为 on-topic对于堆栈溢出。
2年前关闭。
Improve this question
许多语言都有自己的高级非阻塞 HTTP 客户端,例如 python 的 aiohttp。即,它们发出 HTTP 请求;不要等待响应;当响应到达时,他们会进行某种回调。
我的问题是
最佳答案
其他语言具有此类功能,因为当它们阻塞等待请求时,它们会阻塞它们正在使用的线程。 Java、Python 或 NodeJS 就是这种情况。因此,为了使它们有用,开发人员需要使用回调来实现这种长期存在的阻塞操作。其根本原因是使用了下面的 C 库,它阻塞了输入输出操作上的线程。
Go 不使用 C 库(仅在某些情况下,但可以关闭)并自行进行系统调用。执行此操作时,执行当前 goroutine 的线程将其停放并执行另一个 goroutine。因此,您可以拥有大量阻塞的 goroutine 而不会耗尽线程。 Goroutines 在内存方面很便宜,线程是操作系统实体。
在 Go 中使用 goroutine 更好。由于上述原因,不需要创建异步客户端。
为了在 Java 中进行比较,您很快就会得到多个线程。下一步是将它们集中起来,因为它们的成本很高。池化意味着限制并发。
关于go - 是否有非阻塞 http 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59421516/