gpt4 book ai didi

c - 线程创建和删除的开销与未使用线程的开销

转载 作者:行者123 更新时间:2023-11-30 19:59:03 32 4
gpt4 key购买 nike

为了开发一个可以同时处理最多“x”个客户端的 udp 服务器,我有两个选择:

  1. 当服务器启动时,会立即创建“x”个线程,而不检查所有“x”个客户端是否处于事件状态。

  2. 第二个选项是,当服务器启动时,它会等待客户端的请求,当来自特定客户端的请求到达时,才会生成一个线程来为该客户端提供服务。如果特定客户端出现故障,专用于该特定客户端的线程也会被删除。

在选项#1中,即使只有 1 个客户端连接,也会在开始时创建“x”个线程,只有当线程将被利用并且所有剩余的“x-1”个线程将被挂起时。

在选项#2中,我似乎将面临连续线程创建和删除的开销。

我决定使用选项#2 来实现我的应用程序,但我仍然很困惑我的选择是否正确。

如果我错了,请帮助我。

最佳答案

通过实现线程池来结合使用两者。创建一个最初为空的线程池,或者包含多个初始挂起的线程,由您选择。当新客户端“连接”并且未超过允许的最大客户端数时,检查池中是否有可用线程。如果是这样,请重新使用它。如果没有,则创建一个新线程。当客户端“断开连接”时,将线程放回池中并挂起。如果给定线程在池中停留一段时间,请将其删除并销毁。

关于c - 线程创建和删除的开销与未使用线程的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16248512/

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