Google App Engine提供诸如任务队列和后端(现在的模块)之类的服务,以并行处理请求和执行“并发工作”。使用Pipelines API,Fantasm等可以轻松实现典型的扇入扇出/分叉连接技术。
在配置后端/模块的硬件时,您可以在B1,B2,B4,B8之间进行选择,但它没有说明CPU配置中的内核数量。也许CPU核心数量与此无关。后端支持为每个传入请求生成“后台线程”,但由于着名的GIL(全局解释器锁),Python实际上无法进行真正的并发工作。
在启动新实例之前,一个前端实例将处理8个请求(默认值,最多30个)。
带有Threadsafe指令的Python 2.7据说可以在一个隔离的实例上并行处理传入的请求,这是正确的,还是仅传入跨真实并发的独立实例的传入请求?
在Google App Engine上,实际上使用真正的并发技术实现了什么,另一方面,推荐的设计模式是什么获得了最真实的并发和扩展?
您可以使用10-20个驻留B8实例进行“手动扩展”后端/模块,每个实例产生10个“超出生命”的后台线程,并且在I / O工作中始终执行10个并发异步URL提取,或者应该它是用动态实例创建的吗?
答案 0 :(得分:1)
带有Threadsafe指令的Python 2.7据说可以在一个隔离的实例上并行处理传入的请求,这是正确的吗?
Yes, that's correct.它确实在每个实例上运行多个并发请求,而不是仅跨实例传播它们。 Same with Java and Go(但it sounds like not PHP)。它通常被认为是允许这样做的最佳实践,因为它大大提高了大多数工作负载的效率。
This SO answer提供了有关GAE如何确定是否以及何时同时运行请求的最佳详细信息。
你是对的,Python有一个GIL,它在一定程度上限制了内核的并发性,对于真正受CPU限制的工作负载,每个核心不止一个线程对你没什么帮助。但是,绝大多数工作负载不 CPU绑定,尤其是GAE等平台上的Web应用程序。它们通常是I / O绑定,即它们大部分时间都在等待数据存储,HTTP提取到其他服务等等.App Engine使用阻塞时间来有效地在同一个实例上运行其他并发请求。 / p>