我目前正在为我的网络上的传出 TCP 和 UDP 数据包存储 IP 地址和端口。我监视网络并等待对这些数据包的响应。
通过在 IP 地址和端口列表中搜索过去的出站数据包,首先检查进入网络的每个数据包以查看它是被请求的还是未经请求的。
目前,我使用一个被锁定的动态数组,然后搜索到达网络的每个数据包。在我们升级到 100 mbps 服务之前,这一直很好。正如我们的分析器所指出的那样,在高峰时间,我们在搜索功能中存在很多争用。
查看了很多不同的算法,我没有发现很多适合这种特定类型的使用。我看过的大多数细节原子插入和原子访问,总体上非常简单。
我在想,首先复制数组,搜索它,如果找到它就删除它,然后对两个数组引用/指针进行比较和交换,这可能是一种改进。如果 CAS 成功了,那很好。如果没有,那么再做一遍,直到它完成为止。
但是,这会占用大量内存,我想它可能会降低性能。我们有很多内存要使用,但我相信在高峰期,会有很多 CAS 失败。
我将致力于此实现以进行一些分析,但我很好奇是否有其他人曾经提出过解决此问题的方法并愿意分享。尽管我使用 C 和 C# 工作,但任何语言的示例都很好。