【问题标题】:Google App Engine: tasks vs threads?Google App Engine:任务与线程?
【发布时间】:2011-03-25 09:14:33
【问题描述】:

我有一个本地科学应用程序,它使用线程来处理大型计算的独立部分。我的团队希望它成为一个 Web 应用程序,所以现在我正在研究如何移植它(所以请原谅任何完整的愚蠢陈述)。我正在使用 Google App Engine 来处理其中的“网络”部分,但我仍在研究其他哪些翻译是合适的。

我的第一个想法是让计算完全保持原样(例如,将一些 Web 表单数据消化成适当的格式,将其传递给生成线程的计算器等)。

但是,我也在阅读有关 Queues + TaskOptions 的信息——这看起来像是我应该使用的,而不是 ExecutorService + Callable。各个子计算可能需要一些时间来处理(尽管它们所需的时间也可能有很大差异),所以我想理想情况下我希望用户请求整个计算,然后被带到加载的页面当结果可用时。

Queues + TaskOptions 使用正确吗?如果不是,那是什么?如果是这样,是否有我想要做的方便的平行示例?

最后,我的小组对计算内部的广泛发布存在一些短期疑虑,因此其详细信息都是服务器端的 - 这应该减轻这些担忧吗?

最终(在一些出版物等之后)我们计划公开这些内部结构,并且大概网络版本可以移动计算客户端。现在有没有更好的方法来实现,这将使未来的翻译更简单?或者这甚至不值得担心(因为我已经在本地应用程序中有效地拥有“客户端”版本)?

【问题讨论】:

    标签: java google-app-engine multithreading scheduled-tasks


    【解决方案1】:

    您不能在 App Engine 上创建线程。任务队列+任务选项将是要走的路。

    如果您想将内容保存在内部,那么现在将其保存在服务器端将是最安全的做法。但是,您可以考虑将您的工作流公开为一项服务,以便将来客户可以与同一个服务进行通信。

    【讨论】:

    • 好的,很高兴知道重新线程 - 关于我的问题的其他部分的任何见解?
    【解决方案2】:
    1. 应用引擎中的所有请求(包括任务)的时间限制为 30 秒。如果你的计算需要更长的时间,你需要想办法把它们分解成更小的块。应用引擎的最佳点是网络应用,而不是数字运算。

    2. 如果您希望能够在客户端和服务器端之间共享代码,一种选择是研究 GWT。 (谷歌网络工具包)它将允许您使用 java 源代码编写客户端,然后将其转换为 javascript。这将是重复使用您已有的数字运算代码的一种方法。

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多