Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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_C++ - Fatal编程技术网

Java 服务器设计与实现

Java 服务器设计与实现,java,c++,Java,C++,我从事嵌入式系统和硬件接口的系统编程工作 迄今为止。出于乐趣和个人知识,最近我在用Erlang弄湿了我的手之后,一直在尝试学习更多关于服务器编程的知识。我一直在回想从C++到java的服务器,现在我想知道如何用C++或java等技术来构建可扩展的系统。 我已经读到,由于上下文切换和内存有限,每个客户端线程处理程序是不现实的。通常会创建一个线程池,并混合使用工作线程和异步I/O来处理请求。我想知道,首先,如何确定线程池的大小?人们是否只需要衡量并找到最佳平衡?最终,随着系统的扩展,可能需要多台服务

我从事嵌入式系统和硬件接口的系统编程工作 迄今为止。出于乐趣和个人知识,最近我在用Erlang弄湿了我的手之后,一直在尝试学习更多关于服务器编程的知识。我一直在回想从C++到java的服务器,现在我想知道如何用C++或java等技术来构建可扩展的系统。 我已经读到,由于上下文切换和内存有限,每个客户端线程处理程序是不现实的。通常会创建一个线程池,并混合使用工作线程和异步I/O来处理请求。我想知道,首先,如何确定线程池的大小?人们是否只需要衡量并找到最佳平衡?最终,随着系统的扩展,可能需要多台服务器来处理请求。如何跨多台服务器管理请求以处理大型客户机


我只是在寻找一些方向,在那里我可以阅读更多,并找到我的问题的答案。我会研究计算机科学的哪个领域来获取这方面的更多信息?这个计算领域有什么设计模式吗?

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

和 是非常好的书,描述了许多设计模式,以及它们与高度可移植的库的使用。

< P>像洛塔尔一样,我们使用包含反应器和PROTER模式的库来处理异步事件和用C++代码异步I/O。我们使用可根据需要增长(达到可配置的最大值)并随时间收缩的较大工作线程池

< C++ >的一个诀窍是如何在网络边界(不由语言处理)中传播异常和错误情况。我知道.NET有很多方法可以跨越这些网络边界抛出异常


你可以考虑的是研究SOA(面向服务的体系结构)来处理更高级别的分布式系统问题。ACE如果真的在机器的裸机上运行。

< P> C++,我使用Booo::ASIO,它非常现代C++,非常适合使用。此外,C++0x网络库将基于ASIO的实现,因此它是有价值的知识


正如您已经了解到的,对于每个客户机1个线程的设计,这是行不通的。对于高性能多线程,最好的线程数似乎是CoresX2,但对于服务器,每个请求都有大量IO,这意味着大量空闲等待。从经验来看,看看Apache、MySQL和Oracle,数据库服务器的线程数量约为CoresX10,web服务器的线程数量约为CoresX40,并不是说这些是理想的,但它们似乎是成功系统的模式,因此,如果您的系统能够平衡,以最佳方式使用相似的数字,您将知道您的设计并不完全糟糕。

我很欣赏这个问题,但可能是四个或五个问题合在一起。