【发布时间】:2010-08-22 23:05:14
【问题描述】:
我们的分析服务器是用 C++ 编写的。它基本上查询底层存储引擎并通过thrift返回相当大的结构化数据。一个典型的请求大约需要 0.05 到 0.6 秒才能完成,具体取决于请求的大小。
我注意到我们可以在 c++ 代码中使用的 Thrift 服务器有几个选项,特别是 TNonblockingServer、TThreadedServer 和 TThreadPoolServer。似乎 TNonblockingServer 是要走的路,因为它可以支持更多的并发请求,并且仍然在后台使用线程池来处理任务。它还避免了构建/销毁线程的成本。
Facebook 关于 Thrift 的更新:http://www.facebook.com/note.php?note_id=16787213919
在 Facebook,我们正在为 C++ 开发一个完全异步的客户端和服务器。这 服务器使用事件驱动的 I/O,就像当前的 TNonblockingServer,但它的接口 应用程序代码全部基于异步回调。这将允许我们写 可以同时处理数千个请求的服务器(每个请求都需要 只用几个线程调用其他 Thrift 或 Memcache 服务器)。
stackover 上的相关帖子:Large number of simulteneous connections in thrift
话虽如此,您不一定能够真正更快地完成工作(处理程序 仍然在线程池中执行),但更多的客户端将能够一次连接到您。
只是想知道我在这里是否缺少其他因素?我该如何决定哪一个最适合我的需求?
【问题讨论】:
-
我看到了这篇文章。 blog.51cto.com/luckybins/1344189。我很清楚。
标签: c++ multithreading threadpool nonblocking thrift