【问题标题】:Is a blocking function on an asynchronous api idiomatic?异步 api 上的阻塞函数是惯用的吗?
【发布时间】:2015-09-15 20:07:19
【问题描述】:

拥有一个异步 api 是否更惯用,具有阻塞函数作为同步 api,它只是调用异步 api 并在返回之前等待答案,而不是使用非并发 api 并让调用者运行它如果他们想要异步,他们自己的 goroutine?

在我目前的情况下,我有一个工作 goroutine,它从请求通道读取并将返回值发送到响应通道(它从请求通道获得请求结构)。

这似乎与链接的问题不同,因为我需要返回值,或者进行同步,以便我可以确定 api 调用在我做其他事情之前完成,以避免竞争条件。

【问题讨论】:

  • Idiomatic Golang goroutines 的可能重复项
  • 嗯,这取决于。 Go 不会心胸狭窄:更适合您的问题的是“正确”的解决方案。”

标签: go idioms


【解决方案1】:

对于golang,我推荐Effective Go-concurrency。特别是我认为使用golang的每个人都需要了解goroutineparallelization的基础知识:

Goroutines 被多路复用到多个 OS 线程上,因此如果一个线程阻塞,例如在等待 I/O 时,其他线程会继续运行。他们的设计隐藏了线程创建和管理的许多复杂性。

Go 运行时的当前实现仅将单个内核用于用户级处理。在系统调用中可以阻塞任意数量的 goroutine,但默认情况下,任何时候只有一个可以执行用户级代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2020-10-25
    • 2013-05-07
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多