多线程 – 寻求有关线程之间负载平衡的教程和信息

前端之家收集整理的这篇文章主要介绍了多线程 – 寻求有关线程之间负载平衡的教程和信息前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道术语“负载平衡”可能非常广泛,但我试图解释的主题更具体,我不知道正确的术语.我正在构建的是一组服务器/客户端应用程序.服务器需要能够处理大量的数据传输以及客户端连接,因此我开始研究多线程.

基本上有3种方法可以看到为服务器实现任何类型的线程……

>一个处理所有请求的线程(如果有500个客户端登录,则会破坏线程的用途)
>每个用户一个线程(为500个客户端中的每个客户端创建1个线程存在风险)
>为任意数量的客户均分工作的线程池(我正在寻找的)

第三个是我想知道的.这包括这样的设置:

>一次最多运行250个线程
> 500个客户端不会创建500个线程,但共享250个线程
>请求队列将被挂起以传递给线程
>线程没有绑定到客户端,反之亦然
>服务器根据活动(负载平衡)决定发送请求的线程

我目前还没有找到任何代码,但有关如何使用这样的设置的信息,以及最好是在Delphi(XE2)中完成此操作的教程.即使是一个适当的单词或名称来填充这个主题就足够了,所以我可以自己进行搜索.

编辑

我发现有必要解释一下这将用于什么.我将流式传输命令和图像,将有一个双插槽设置,其中有一个“主命令套接字”和另一个“附加图像流套接字”.所以真正的一个连接是2个套接字连接.

与服务器主套接字的每个连接都创建(或重新使用)表示该连接所需的所有数据的对象,包括线程,图像,设置等.对于与主套接字的每个连接,还连接了流式套接字.它并不总是流式传输图像,但命令套接字始终准备就绪.

关键是我已经在我当前的设置中有一个线程机制(每个会话对象1个线程),我想把它转移到类似池的多线程环境.这两个连接在一起需要对这些线程进行更高级别的控制,我不能依赖像Indy这样的东西来保持这些同步,我宁愿知道事情是如何工作的,而不是学会相信其他东西来完成工作.我.

解决方法

IOCP服务器.这是唯一的高性能解决方案.它在用户模式下基本上是异步的(‘M $-speak中的重叠I / O),一个线程池发出WSARecv,WSASend,AcceptEx调用,然后所有等待IOCP队列的完成记录.当有用的事情发生时,内核线程池执行实际的I / O,然后将完成记录排队.

您至少需要一个缓冲类和套接字类(并且可能还有其他类似的高性能 – objectPool和pooledObject类,因此您可以创建套接字和缓冲池).

原文链接:https://www.f2er.com/java/120825.html

猜你在找的Java相关文章