是异步api惯用的阻塞函数吗?

时间:2015-06-29 11:21:25

标签: go idioms idiomatic

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

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

这似乎与链接的问题有所不同,因为我需要返回值,或者为了能够确保api调用在我做其他事情之前完成,以避免竞争条件。

1 个答案:

答案 0 :(得分:0)

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

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

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