gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:52:29 25 4
gpt4 key购买 nike

我知道“负载平衡”一词可能非常广泛,但我试图解释的主题更具体,而且我不知道正确的术语。我正在构建的是一组服务器/客户端应用程序。服务器需要能够处理大量数据传输以及客户端连接,因此我开始研究多线程。

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

  • 一个线程处理所有请求(如果有 500 个客户端登录,则无法实现线程的目的)
  • 每个用户一个线程(为 500 个客户端中的每个客户端创建 1 个线程存在风险)
  • 为任意数量的客户端均匀分配工作的线程池(我正在寻找的)

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

  • 一次最多运行 250 个线程
  • 500 个客户端不会创建 500 个线程,而是共享 250 个
  • 请求队列将等待传递到线程中
  • 线程不依赖于客户端,反之亦然
  • 服务器根据事件(负载平衡)决定向哪个线程发送请求

我目前还没有寻找任何代码,而是寻找有关这样的设置如何工作的信息,最好是在 Delphi (XE2) 中完成此操作的教程。即使是一个合适的单词或名称来描述这个主题也足够了,这样我就可以自己进行搜索。

编辑

我发现有必要解释一下它的用途。我将流式传输命令和图像,将有一个双插槽设置,其中有一个“主命令插槽”和另一个“附加图像流插槽”。所以实际上 1 个连接就是 2 个套接字连接。

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

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

最佳答案

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

您至少需要一个缓冲区类和套接字类(可能还需要其他高性能类 - objectPool 和 pooledObject 类,以便您可以创建套接字和缓冲池)。

关于multithreading - 寻求有关线程之间负载平衡的教程和信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com