- 论坛徽章:
- 0
|
我做的是apache server 的module.每个用户连接对应一个长连接线程(也就是apache module的一次请求处理),每个线程用select监听两个socket.
程序模型如下;
- while(1)
- {
- FD_ZERO(&rset);
- FD_SET(sockfd,&rset);//sockfd,fifo都设置成了非阻塞的。
- FD_SET(fifo,&rset);
- time.tv_sec = 10;
- time.tv_usec = 0;
- int sel = select(maxfd + 1,&rset,NULL,NULL,&time);//最后一个参数设置成NULL也不行。
- if(sel <= 0)
- continue; //用户只有200左右,应该不会超过select的文件描述符限制吧?
- if(FD_ISSET(fifo, &rset))
- {
- .......//对应处理。
- }
- if(FD_ISSET(sockfd, &rset))
- {
- 对应处理
- }
- }
复制代码
但改成如下的模型cpu利用率就降到了%1.
- while(1)
- {
- nanosleep(&time, NULL);//就是每0.2秒看一下两个非阻塞文件描述符是不是有数据,有就处理。
- if(1)
- {
- .......//对应处理。
- }
- if(1)
- {
- 对应处理
- }
- }
复制代码
在200个左右的线程里每个都用用select为何会使cpu利用率那么高,不明白为什么,请各位大侠多多指教! |
|