gpt4 book ai didi

multithreading - 延迟处理更多请求/秒

转载 作者:行者123 更新时间:2023-12-04 06:45:51 25 4
gpt4 key购买 nike

我有一个使用赛璐珞的 JRuby 应用程序。它通过 Zeromq 套接字接收请求并以 JSON 字符串响应。

因此,我的应用程序中有 2 个参与者,一个用于处理请求,另一个用于发送响应(Zeromq 中的推送套接字)。应用程序以大约 30 个请求/秒的速率接收请求,将来会更多,比如 1000 个/秒。但是随着每秒请求数量的增加,需要更多的时间来处理。它开始使用更多的 CPU。

对于每个收到的请求,我都在 defer block 中处理它。

defer {
response = ResponseHandler.new(socket,message).start
send_response(response)
}

对于 20 个请求/秒,它可以正常工作,没有任何延迟。服务器配置为 15Gb RAM 和 4 核。它还连接到 Postgres DB 和 Redis DB。但这在这里似乎不是问题。

这是我的基本结构,有主要 Actor 服务,

supervisor = Service.supervise

这会在内部创建具有 10 个池的 PushSock Actor 实例。

@pushsocket_actor = PushSock.pool(size: 10)

上面 defer block 中的 send_response 方法调用 pushsocket actor。在 defer block 中,ResponseHandler 不是 Actor。

所以对于 Service Actor,我没有使用池。

最佳答案

使用池。

现在您正在使用内部线程池...它不断产生新线程。相反,创建一个参与者池,然后使用 async 调用......这实际上会减少一次运行的任务数量。这将加快响应时间,因为它将全速处理,而不仅仅是接受请求。

不过,您需要现实地了解您的资源需求!您知道每个请求需要多少吗?您需要以此为基础规划您的 Actor 策略。

不要使用过多或过少的 Actor 。现在,我怀疑您使用了太多线程,因为如果与实际大小的池一起使用,使用 defer {} 不会像 async 那样设置限制。

关于multithreading - 延迟处理更多请求/秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450414/

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