草庐IT

描述符

全部标签

c - 在 Linux 上用 C 语言处理超过 1024 个文件描述符

我在使用epoll(边缘触发)和线程的线程网络服务器上工作,我正在使用httperf对我的服务器进行基准测试。到目前为止,它的表现非常好,或者说几乎完全符合发送请求的速度。直到1024障碍,一切都减慢到大约30个请求/秒。在Ubuntu9.0464位上运行。我已经试过了:成功地增加了文件描述符的ulimit数量。它只是不会提高1024个并发连接以上的性能。andri@filefridge:~/Dropbox/School/Group452/Code/server$ulimit-n20000我很确定这种减速发生在操作系统中,因为它发生在事件发送到epoll之前(是的,我还增加了epoll

c - 在 Linux 上用 C 语言处理超过 1024 个文件描述符

我在使用epoll(边缘触发)和线程的线程网络服务器上工作,我正在使用httperf对我的服务器进行基准测试。到目前为止,它的表现非常好,或者说几乎完全符合发送请求的速度。直到1024障碍,一切都减慢到大约30个请求/秒。在Ubuntu9.0464位上运行。我已经试过了:成功地增加了文件描述符的ulimit数量。它只是不会提高1024个并发连接以上的性能。andri@filefridge:~/Dropbox/School/Group452/Code/server$ulimit-n20000我很确定这种减速发生在操作系统中,因为它发生在事件发送到epoll之前(是的,我还增加了epoll

linux - 如何最有效地处理大量文件描述符?

似乎有几个选项可用于处理大量套接字连接的程序(例如Web服务、p2p系统等)。生成一个单独的线程来处理每个套接字的I/O。使用select将I/O多路复用到单个线程中的系统调用。使用poll多路复用I/O的系统调用(替换选择)。使用epoll系统调用以避免必须通过用户/系统边界重复发送套接字fd。生成多个I/O线程,每个线程使用轮询API多路复用连接总数中相对较小的一组。按照#5除了使用epollAPI为每个独立的I/O线程创建一个单独的epoll对象。在多核CPU上,我希望#5或#6具有最佳性能,但我没有任何硬数据支持这一点。网上搜索出现this描述作者测试上述方法#2、#3和#4的

linux - 如何最有效地处理大量文件描述符?

似乎有几个选项可用于处理大量套接字连接的程序(例如Web服务、p2p系统等)。生成一个单独的线程来处理每个套接字的I/O。使用select将I/O多路复用到单个线程中的系统调用。使用poll多路复用I/O的系统调用(替换选择)。使用epoll系统调用以避免必须通过用户/系统边界重复发送套接字fd。生成多个I/O线程,每个线程使用轮询API多路复用连接总数中相对较小的一组。按照#5除了使用epollAPI为每个独立的I/O线程创建一个单独的epoll对象。在多核CPU上,我希望#5或#6具有最佳性能,但我没有任何硬数据支持这一点。网上搜索出现this描述作者测试上述方法#2、#3和#4的

c - 在线程之间共享相同的 epoll 文件描述符可以吗?

在多个线程之间共享同一个Epollfd(不是socketfd)是否安全?如果是这样,每个线程是否必须将自己的事件数组传递给epoll_wait(2)或者他们可以分享吗?例如void*thread_func(void*thread_args){//extractsocket_fd,epoll_fd,&event,&events_arrayfrom//thread_args//epoll_wait()usingepoll_fdandevents_arrayreceivedfrommain//nowallthreadswouldbeusingsameepoll_fdandeventsarra

c - 在线程之间共享相同的 epoll 文件描述符可以吗?

在多个线程之间共享同一个Epollfd(不是socketfd)是否安全?如果是这样,每个线程是否必须将自己的事件数组传递给epoll_wait(2)或者他们可以分享吗?例如void*thread_func(void*thread_args){//extractsocket_fd,epoll_fd,&event,&events_arrayfrom//thread_args//epoll_wait()usingepoll_fdandevents_arrayreceivedfrommain//nowallthreadswouldbeusingsameepoll_fdandeventsarra

c - 文件描述符中实际存储了多少信息?

这听起来像是一个奇怪的问题,但是当我去打开一个文件时:intfd;fd=open("/dev/somedevice",O_RDWR);我到底得到了什么?我可以看到手册页说:open()函数应返回指定文件的文件描述符,该文件描述符是当前未为该进程打开的最低文件描述符但是是这样吗?它只是一个int还是在幕后附加了数据?我问的原因是我在从用户空间打开文件的地方找到了一些代码(Linux/C)://Userspacecode:intfdC;if((fdC=open(DEVICE,O_RDWR))0){然后在内核端,此模块(提供fd)的文件操作映射读取到n_read()函数:structfile

c - 文件描述符中实际存储了多少信息?

这听起来像是一个奇怪的问题,但是当我去打开一个文件时:intfd;fd=open("/dev/somedevice",O_RDWR);我到底得到了什么?我可以看到手册页说:open()函数应返回指定文件的文件描述符,该文件描述符是当前未为该进程打开的最低文件描述符但是是这样吗?它只是一个int还是在幕后附加了数据?我问的原因是我在从用户空间打开文件的地方找到了一些代码(Linux/C)://Userspacecode:intfdC;if((fdC=open(DEVICE,O_RDWR))0){然后在内核端,此模块(提供fd)的文件操作映射读取到n_read()函数:structfile

c++ - 关闭套接字不释放文件描述符

在对我编写的一些服务器代码进行压力测试时,我注意到即使我在描述符句柄上调用close()(并验证结果是否有错误),描述符也没有被释放,这最终会导致accept()返回错误“太多打开的文件”。现在我明白这是因为ulimit,但我不明白的是,如果我在每个同步接受/读取/发送周期后调用close(),为什么会命中它?我正在通过使用lsof运行watch来验证描述符确实存在:ctsvr9733mike1017usock0,70t03323579can'tidentifyprotocolctsvr9733mike1018usock0,70t03323581can'tidentifyprotoco

c++ - 关闭套接字不释放文件描述符

在对我编写的一些服务器代码进行压力测试时,我注意到即使我在描述符句柄上调用close()(并验证结果是否有错误),描述符也没有被释放,这最终会导致accept()返回错误“太多打开的文件”。现在我明白这是因为ulimit,但我不明白的是,如果我在每个同步接受/读取/发送周期后调用close(),为什么会命中它?我正在通过使用lsof运行watch来验证描述符确实存在:ctsvr9733mike1017usock0,70t03323579can'tidentifyprotocolctsvr9733mike1018usock0,70t03323581can'tidentifyprotoco