在Google (GAE)上,前端实例可以创建多达10个线程,以最大限度地提高吞吐量。根据此页,这样的多线程可以实现如下:
Runnable myTask = new Runnable({
@Override
public void run() {
// Do whatever
}
});
ThreadFactory threadFactory = ThreadManager.currentRequestThreadFactory();
// GAE caps frontend instances to 10 worker threads per instance.
threadFactory.newRequestThread(myTask);为了访问我的GAE服务器端,我将公开许多映射到特定URL的servlet,例如映射到http://myapp.com/fizz的http://myapp.com/fizz。
public class FizzServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {
// Handle the request here. Somehow send it to an available
// worker thread.
}
}--我想我很想知道如何将这两种想法联系起来。据我所见,这里有3种不同的机制/项目:
ServletContextListener并运行自定义代码来“挂钩”;ThreadFactory/ThreadManager的东西(上面)我想我想知道如何实现代码,以便每当一个新请求进入FizzServlet#doGet时,如何确保该请求被发送到可用线程(如果有可用线程的话)。这样,如果FizzServlet是我所公开的唯一一个servlet,它可能会被调用多达10次,然后才会导致一个新的(第11个)传入请求在处理前一个请求时挂起。
我正在寻找servlet和这个线程创建代码之间的胶水代码。提前谢谢。
发布于 2013-02-03 19:58:45
我想我想知道如何实现代码,以便每当一个新请求进入FizzServlet#doGet时,如何确保该请求被发送到可用线程(如果有可用线程的话)。这样,如果FizzServlet是我所公开的唯一一个servlet,它可能会被调用多达10次,然后才会导致一个新的(第11个)传入请求在处理前一个请求时挂起。
这就是GAE servlet引擎为您所做的。您部署了一个包含servlet的应用程序,当请求传入时,servlet引擎使用线程来处理请求并调用servlet。你没什么可做的。
如果您的servlet的doGet()或doPost()方法(由GAE调用)需要并行执行多个任务(例如,联系其他几个网站),那么您将按照链接到的页面中所解释的那样自行启动线程。
https://stackoverflow.com/questions/14676353
复制相似问题