中间件应用程序中的线程数

时间:2009-04-29 22:11:32

标签: multithreading middleware

我正在编写一个应用程序服务器(再次,与我已在此处发布的问题无关),我想知道在创建在数据库上工作的工作线程时使用的策略是什么。一些初步日期:服务器接收xml并发送回xml,所有请求都查询数据库 - 每个请求可能需要几毫秒到几秒钟。

例如,假设您的服务器为少数到中等数量的客户端提供服务,而这些客户端又为每个连接发送少量请求。每个连接有一个工作线程是否安全,还是应该按照请求进行?还应该使用线程池来限制服务器使用的资源,还是每次发出新的连接/请求时都应该添加一个worker?

服务器是否应该将其创建的线程数限制为上限?

希望我不是太模糊......我几乎无法睁开眼睛。

3 个答案:

答案 0 :(得分:2)

如果您没有丰富的经验,编写应用程序服务器是一项艰巨的任务。可以通过使用ACE之类的框架来缓解它,这些框架允许您构建应用服务基础架构的不同配置,例如每个连接的线程线程池领导者跟随者然后使用可扩展的服务框架加载适当的配置。

我建议您阅读有关ACE的这些书籍以获取

了解框架可以为您做些什么。

答案 1 :(得分:0)

我编写这样的应用程序的方法是通过命令行和/或配置文件使线程数可配置。然后,我使用不同数量的线程进行一些负载测试 - 总是有一个最佳数量,超过该数量,性能开始降低。

答案 2 :(得分:0)

如果您遵循Java EE应用服务器开发人员采用的模型,则会有一个传入请求的队列和一个工作线程池来为它们提供服务。这是每个请求一个线程。当工作线程完成请求时,它会返回池中。如果传入请求的显示速度快于工作线程池可以为它们提供服务,则队列允许它们堆叠,直到释放工作线程。可以调整队列大小和线程池以匹配您的情况。

我想知道为什么有人会觉得需要从头开始编写自己的服务器,特别是当你描述的场景得到其他人很好的解决时。如果你的愿望是教育,祝你好运。如果你认为你将改进过去所做的事情,我会重新审视这个假设。