Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine Golang、应用程序引擎、频道和线程安全_Google App Engine_Go - Fatal编程技术网

Google app engine Golang、应用程序引擎、频道和线程安全

Google app engine Golang、应用程序引擎、频道和线程安全,google-app-engine,go,Google App Engine,Go,“此外,尽管goroutines和Channel存在,但当Go应用程序在app Engine上运行时,在给定实例中只运行一个线程。也就是说,所有goroutines都在单个操作系统线程中运行,因此对于给定的客户端请求,没有可用的CPU并行性。我们希望在某个时候取消此限制” 那是在2011年5月。这仍然是真的吗 我有一个应用程序,除了利用Golang的速度,什么都不做;获取一些输入数据,对其执行内存计算,并返回结果。切勿接触数据存储或任何其他应用程序引擎API 我需要使用该应用程序来执行许多计算,

“此外,尽管goroutines和Channel存在,但当Go应用程序在app Engine上运行时,在给定实例中只运行一个线程。也就是说,所有goroutines都在单个操作系统线程中运行,因此对于给定的客户端请求,没有可用的CPU并行性。我们希望在某个时候取消此限制”

那是在2011年5月。这仍然是真的吗

我有一个应用程序,除了利用Golang的速度,什么都不做;获取一些输入数据,对其执行内存计算,并返回结果。切勿接触数据存储或任何其他应用程序引擎API

我需要使用该应用程序来执行许多计算,理想情况下需要一定程度的并行化。因为我是一个Golang noob,我只是编写了算法,没有考虑线程安全。当我一次发送一个请求时,这很好,但当我尝试并行发送多个计算时,所有结果都是错误的。我怀疑,但不知道100%,线程安全是个问题,特别是当algo使用映射时,映射不是线程安全的

所以。如何使我的algo线程安全并获得一定程度的并行性

第一个想法是使用通道,这似乎是线程安全的:

但后来我看到了顶部的链接,这表明频道可能不可用

所以。。如果它们不可用,可能我需要为计算设置一个任务队列,一次只能执行一个计算

有人能告诉我在Golang App Engine上实现一定程度的线程安全并行化的最佳模式吗


谢谢。

我不知道app engine当前是否支持多个操作系统线程,但即使只有一个操作系统级线程可用,您也完全可以使用通道。您提供的链接确实声明“goroutines and channels is present”,它们只是在一个操作系统级线程中处理。

Google Appengine目前只允许一个操作系统线程

了解操作系统线程是如何工作的;Goroutines和它们的栈;而调度程序工作,我建议阅读或

由于您可以在一个线程上拥有多个通道或路由,Appengine可以很好地处理并发性。如果您需要并行性(即,不仅要运行多个goroutine,还要在多个处理器上运行它们),那么Appengine目前不是解决方案,因为它的GOMAXPROCS设置为1


就您的特定代码而言,您没有提供任何我们可以查看并帮助调试您的竞争条件的代码。为了自己做到这一点,您可以阅读这篇关于和使用的博客文章,不知道这是否是它,但任何全局变量仍然可以通过多个goroutine更新,即使使用GOMAXPROCS=1。如果您真的不需要全局函数来协调多个任务,那么让它们不再是全局函数——也许可以将它们移动到您为每个请求分配的结构中。这个问题是一个相当笼统的描述,所以很难说得更多。