我正在考虑解决此问题的最佳方法。
我有一个可能的客户端数组,每个客户端都包含要发送的数据包列表。
Client[] client [] = new Client[10000];
主循环将使用以下方式向客户端添加数据包
lock(client[id].packets)
client[id].packets.Add(packet);
我有10个线程将执行以下操作
static int currentClient = 0;
static Client GetNextSession()
{
return clients[(uint)((uint)Interlocked.Increment(ref currentClient) % 10000)];
}
private void Run()
{
List<Packet> internal = new List<Packet>();
while(true)
{
Client c = GetNextSession();
if(c == null)
continue;
lock(c.packets)
{
internal.AddRange(c.packets);
c.packets.Clear()
}
byte[] mergedPackets = MergePackets(internal);
_socket.SendTo(mergedPackets, 0, mergedPackets.Length, 0, ep);
}
}
重要的是我们需要在发送之前合并数据包。
由于所有空值,预期的CPU时间将为〜100%。有什么更好的方法来解决这个问题?