我正在编写一个应用程序服务器(再次,与我已在此处发布的问题无关),我想知道在创建在数据库上工作的工作线程时使用的策略是什么。一些初步日期:服务器接收xml并发送回xml,所有请求都查询数据库 - 每个请求可能需要几毫秒到几秒钟。
例如,假设您的服务器为少数到中等数量的客户端提供服务,而这些客户端又为每个连接发送少量请求。每个连接有一个工作线程是否安全,还是应该按照请求进行?还应该使用线程池来限制服务器使用的资源,还是每次发出新的连接/请求时都应该添加一个worker?
服务器是否应该将其创建的线程数限制为上限?
希望我不是太模糊......我几乎无法睁开眼睛。
答案 0 :(得分:2)
如果您没有丰富的经验,编写应用程序服务器是一项艰巨的任务。可以通过使用ACE之类的框架来缓解它,这些框架允许您构建应用服务基础架构的不同配置,例如每个连接的线程,线程池,领导者跟随者然后使用可扩展的服务框架加载适当的配置。
我建议您阅读有关ACE的这些书籍以获取
了解框架可以为您做些什么。
答案 1 :(得分:0)
我编写这样的应用程序的方法是通过命令行和/或配置文件使线程数可配置。然后,我使用不同数量的线程进行一些负载测试 - 总是有一个最佳数量,超过该数量,性能开始降低。
答案 2 :(得分:0)
如果您遵循Java EE应用服务器开发人员采用的模型,则会有一个传入请求的队列和一个工作线程池来为它们提供服务。这是每个请求一个线程。当工作线程完成请求时,它会返回池中。如果传入请求的显示速度快于工作线程池可以为它们提供服务,则队列允许它们堆叠,直到释放工作线程。可以调整队列大小和线程池以匹配您的情况。
我想知道为什么有人会觉得需要从头开始编写自己的服务器,特别是当你描述的场景得到其他人很好的解决时。如果你的愿望是教育,祝你好运。如果你认为你将改进过去所做的事情,我会重新审视这个假设。