【发布时间】:2011-11-06 23:12:55
【问题描述】:
我有一个非常简单的服务器(使用 kryonet)。客户端仅存储汽车的当前状态(x、y、角度等)并发送加速和转向请求。
服务器正在接收请求并将它们添加到物理线程耗尽、读取和更新的 ArrayBlockingQueue。
当添加另一个玩家时,游戏速度会减慢近一倍。我已经排除了很多事情(我将所有更新和包发送限制在 60Hz。)
我怀疑使用阻塞队列会阻塞太多,导致速度变慢。
如何将客户端请求发送到物理线程而不会出现阻塞问题?
【问题讨论】:
-
让我直截了当地说:您想使用阻塞队列每秒传递 60 条消息,并认为这是瓶颈??
-
我不明白你的问题,我对屏蔽列表很陌生,所以请不要这样做。
-
如果队列没有填满,那么你没有阻塞。你的 CPU 是否在 100% 运行?当您添加一个时,您一开始有多少玩家?
-
CPU 保持在 55% 左右(即使在添加玩家时也是如此)。 1 个玩家目前是 5 个物理体。一开始我有 1 个玩家,然后我运行另一个客户端连接到服务器(所以我有 10 个身体模拟)。当我这样做时,汽车的加速速度是原来的一半。
-
您在运行多核处理器吗?如果是这样,物理线程将被限制为单个核心。它可以消耗 100% 的内核,这将占双核 CPU 的 50%。
标签: java concurrency box2d slowdown kryo