Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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
Java 从应用程序引擎提供缓存数据时的多线程处理_Java_Multithreading_Google App Engine_Gwt_Memcached - Fatal编程技术网

Java 从应用程序引擎提供缓存数据时的多线程处理

Java 从应用程序引擎提供缓存数据时的多线程处理,java,multithreading,google-app-engine,gwt,memcached,Java,Multithreading,Google App Engine,Gwt,Memcached,我有一个非常简单的问题,找不到答案,这让我觉得我很可能遗漏了一些基本事实 我使用memcache来缓存和服务大型静态数据,这通常使我们能够从一个实例中服务数千个用户;然而,由于应用程序引擎是单线程的,所以每个请求都会排队并按顺序提供服务,然后在为大量用户提供服务时最终启动多个实例 除了延迟,尤其是在启动新实例时,这会导致更大的定价问题。由于谷歌现在收取的是实例小时费用,而不是CPU利用率,而且通过提供缓存数据,我们很可能只使用每个实例可用CPU的一小部分,因此对许多不必要的额外实例收取费用,类似

我有一个非常简单的问题,找不到答案,这让我觉得我很可能遗漏了一些基本事实

我使用memcache来缓存和服务大型静态数据,这通常使我们能够从一个实例中服务数千个用户;然而,由于应用程序引擎是单线程的,所以每个请求都会排队并按顺序提供服务,然后在为大量用户提供服务时最终启动多个实例

除了延迟,尤其是在启动新实例时,这会导致更大的定价问题。由于谷歌现在收取的是实例小时费用,而不是CPU利用率,而且通过提供缓存数据,我们很可能只使用每个实例可用CPU的一小部分,因此对许多不必要的额外实例收取费用,类似于post

我错过什么了吗


提前感谢您的回答

如果您通过在appengine-web.xml文件中将“threadsafe”元素设置为“true”来启用多线程,则App Engine不再是单线程的

但是,在MemCache中缓存数据并不意味着您可以为来自单个实例的无限数量的请求提供服务。memcache没有运行您的应用程序代码,它只会让您省去数据存储,因此速度更快

根据您的代码和内存使用情况等,当App Engine看到一个实例(由于多线程,现在一次处理多个请求)变得“太忙”时,它将启动新实例(这取决于许多仪表板设置以及appengine web.xml中的预热请求设置)新的请求可能由这些服务提供

因此,实例使用情况取决于为传入的请求提供服务的代码的持续时间,以及每个请求的内存使用情况,而不是MemCache

如果说“静态数据”,指的是html文件等,在appengine-web.xml中将它们标记为“静态”,那么实际上您可能根本不需要任何实例。它们由谷歌的内容分发网络(“CDN”)提供服务,而无需启动您的实例或运行任何代码

要实现这一点,客户端请求(例如来自浏览器)只需要请求静态文件,而不需要运行任何应用程序代码


因此,基于所有这些,您可能需要重新表述您的问题,我希望这两种方式都能有所帮助。

为什么您要从memcache提供静态数据,难道它不是静态资源吗?从这个意义上说,它是动态的。这些都是资源,写的很少,读的很多,但是编译后生成的…appengine在java上不是单线程的,而且在去年python对线程的支持(虽然没有我们希望的那么高效)。我的python单线程站点通常可以从memcache以<20毫秒的时间提供相对静态的内容(CMS)。您是否有一个链接,解释如何在app engine上执行Java多线程?