首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >服务器设计与实现

服务器设计与实现
EN

Stack Overflow用户
提问于 2009-04-18 01:57:09
回答 4查看 544关注 0票数 3

到目前为止,我从事嵌入式系统和硬件接口的系统编程工作。为了获得乐趣和个人知识,在接触了Erlang之后,我最近一直在尝试学习更多关于服务器编程的知识。我一直从C++/Java的角度考虑服务器,现在我想知道如何使用C++或Java这样的技术来构建可伸缩的系统。

我读到,由于上下文切换和有限的内存,每个客户端的线程处理程序是不现实的。通常会创建一个线程池,并混合使用工作线程和异步I/O来处理请求。我想知道,首先,如何确定线程池的大小?人们仅仅需要测量并找到最佳平衡吗?最终,随着系统的扩展,可能需要不止一台服务器来处理请求。如何跨多个服务器管理请求来处理大型客户群?

我只是在寻找一些方向,在哪里我可以读更多的书,并找到我的问题的答案。我应该在计算机科学的哪个领域寻找这方面的更多信息?对于这个计算领域,有没有什么设计模式?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-18 04:00:33

对于C++,我使用的是boost::asio,它是非常现代的C++,使用起来非常方便。此外,C++0x网络库将基于ASIO的实现,因此它是有价值的知识。

对于每个客户端1线程的设计,正如你已经了解的那样,它不起作用。对于高性能多线程,最好的线程数量似乎是CoresX2,但对于服务器,每个请求都有大量的IO,这意味着大量的空闲等待。从经验上看,Apache、MySQL和Oracle的线程数量与数据库服务器的CoresX10和web服务器的CoresX40有关,并不是说这些是理想的,但它们似乎是成功系统的模式,所以如果您的系统能够平衡,以便以类似的数量最佳地工作,至少您将知道您的设计不是完全糟糕的。

票数 1
EN

Stack Overflow用户

发布于 2009-04-18 02:06:55

你的问题太笼统了,没有一个好的答案。答案在很大程度上取决于上下文,任何一个线程处理了多少,请求到达的速度有多快,使用的CPU系列,使用的web容器,以及许多其他因素。

票数 3
EN

Stack Overflow用户

发布于 2009-04-18 02:17:20

C++ Network Programming: Mastering Complexity Using ACE and PatternsC++ Network Programming: Systematic Reuse with ACE and Frameworks是非常好的书籍,它们描述了许多设计模式以及它们在高度可移植的ACE库中的使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/762736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档