并发处理网络数据包

时间:2019-12-20 15:24:22

标签: c# networking concurrency

我正在考虑解决此问题的最佳方法。

我有一个可能的客户端数组,每个客户端都包含要发送的数据包列表。

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%。有什么更好的方法来解决这个问题?

0 个答案:

没有答案