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

Multithreading 中间件应用程序中的线程数,multithreading,middleware,Multithreading,Middleware,我正在编写一个应用程序服务器(同样,与我已经在这里发布的一个问题无关),我想知道在创建在数据库上工作的工作线程时使用什么策略。一些初步日期:服务器接收xml并发回xml,所有请求都查询数据库-每个请求可能需要几毫秒到几秒钟的时间 例如,假设您的服务器为中小型客户机提供服务,这些客户机在每个连接上发送少量请求。每个连接有一个工作线程是安全的还是应该每个请求有一个工作线程?还应该使用线程池来限制服务器使用的资源,还是应该在每次进行新连接/请求时添加工作线程池 服务器是否应该将其创建的线程数限制为上限

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

例如,假设您的服务器为中小型客户机提供服务,这些客户机在每个连接上发送少量请求。每个连接有一个工作线程是安全的还是应该每个请求有一个工作线程?还应该使用线程池来限制服务器使用的资源,还是应该在每次进行新连接/请求时添加工作线程池

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


希望我不是太含糊。。。我几乎睁不开眼睛。

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

如果您没有编写应用程序服务器的丰富经验,那么编写应用程序服务器是一项艰巨的任务。通过使用这样的框架,您可以轻松构建应用程序服务基础结构的不同配置,如每个连接的线程、线程池、领导者-追随者,然后使用可扩展的服务框架加载适当的配置

我建议您在ACE上阅读这些书,以便


了解该框架能为您做些什么。

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


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

不是所有人都认为过去所做的事情是人类成就的巅峰。很明显,但它已经做到了。有时候,编写最快的代码就是你从别人那里使用的东西。我一点也不清楚绿地解决方案将如何改进过去所做的工作,特别是如果对过去实践的理解水平很低,以至于需要这样一个问题。这不是关于你,而是关于用户。如果您可以编写一个性能更好的服务器,您的用户将从中受益,即使您需要更长的时间来编写它。有时,为您的特定场景优化的服务器比其他人编写的通用版本要好。很公平,gbjbaanb。也许提问者会将他们的服务器与其他服务器进行基准测试,并向他们汇报,看看他们做得有多好。