我正在编写一个客户端 - 服务器应用程序,它使用POSIX poll函数来提供一种并发客户端处理的形式.客户端还具有状态和其他相关数据,这些数据存储在客户端结构中.
我当前的问题是,当我从poll与客户端(概念上)相关联的套接字文件描述符上获取I/O 提示时,我必须将文件描述符实际匹配到其关联的客户端数据结构.目前我进行O(n_clients)查找(我的客户端数据结构存储描述符),但我想知道是否存在更好的替代方案?
不。如果有,它必须由内核跟踪,因此查找该数据将涉及系统调用。系统调用的成本比在用户空间中执行 O(n) 查找要昂贵一个数量级。
您同时与多少个客户打交道?除非数量级为数百或更多,否则与执行任何类型 I/O 的成本相比,查找成本将微乎其微。
您也可以只使用由文件描述符索引的数组,而不是使用 O(n) 查找,假设您一次打开的描述符不会超过一定数量。例如:
#define MY_MAX_FD 1024 // Tune this to your needs
void *per_fd_data[MY_MAX_FD];
void *get_per_fd_data(int fd)
{
assert(fd >= 0);
if(fd < MY_MAX_FD)
return per_fd_data[fd];
else
{
// Look up fd in a dynamic associative array (left as an exercise to the
// reader)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1847 次 |
| 最近记录: |