http://blog.golang.org/go-and-google-app-engine
“此外,尽管存在 goroutine 和通道,但当 Go 应用程序在 App Engine 上运行时,在给定实例中仅运行一个线程。也就是说,所有 goroutine 都运行在单个操作系统线程中,因此没有 CPU 并行性可用于给定客户请求。我们预计此限制将在某个时候取消”
那是在 2011 年 5 月。它仍然是真的吗?
我有一个应用程序,它只利用 Golang 的速度;获取一些输入数据,对其执行内存计算,返回结果。永远不要接触数据存储区或任何其他 App Engine API。
我需要应用程序来执行许多计算,理想情况下具有某种程度的并行化。因为我是一个 Golang 菜鸟,所以我只是在没有考虑线程安全的情况下编写了算法。当我一次发送一个请求时,这很有效,但是当我尝试并行发送多个计算时,所有结果都是错误的。我怀疑,但不知道 100%,线程安全是问题所在,尤其是因为算法使用地图,而地图不是线程安全的
http://golang.org/doc/faq#atomic_maps
所以。如何使我的算法线程安全并获得某种程度的并行性。
第一个想法是使用通道,这似乎是线程安全的:
是否可以将 Go 的缓冲通道用作线程安全队列?
但是后来我发现顶部的链接表明频道可能不可用。
所以..如果它们不可用,也许我需要为计算设置一个任务队列,它一次只能执行一个计算。
有人可以启发我了解在 Golang App Engine 上实现一定程度线程安全并行化的最佳模式吗?
谢谢。