zoukankan      html  css  js  c++  java
  • Linux IO多路复用 select/poll/epoll

    • Select -- synchronius I/O multiplexing
      • select, FS_SET,FD_CLR,FD_ISSET,FD_ZERO
     1 #include <sys/time.h>
     2 #include <sys/types.h>``
     3 #include <unistd.h>
     4 
     5 int select(int nfds,fd_set *readfds, fd_set *writefds,fd_set exceptfds,struct timeval* timeout);
     6 
     7 void FD_CLR(int fd, fd_set *set);
     8 void FD_ISSET(int fd,fd_set *set);
     9 void FD_SET(int fd, fd_set *set);
    10 void FD_ZERO(fd_set *set);
    •  poll:
      • #include<poll.h>
      • int poll(struct pollfd *fds, nfds_t nfds,int timeout);

    struct pollfd{

      int fd;

      short events;

      short revents;

    };

     

    (一)如果客户端关闭套接字close

    而服务器调用一次write服务器就会收到一个RST segment(TCP传输层)

    如果服务器端再次调用了write,这个时候就会产生SIGPIPE信号,如果不忽略该信号则会导致整个进程退出。

    解决办法:signal(SIGPIPE, SIG_IGN);

     

    (二):TIME_WAIT状态对大并发服务器的影响:

    应该尽可能在服务器端避免出现TIME_WAIT状态

    如果服务器端主动断开连接(先于客户端调动close),那服务器端就会进入TIME_WAIT状态,这样在一定时间内内核会保持一些资源,使得服务器的并发性降低。

    解决办法:让客户端主动断开连接,这样就把TIME_WAIT状态分散到大量的客户端,如果客户端不活跃了,一些客户端不断开连接,这样就会占用服务器的连接资源。所以服务器需要有机制来剔除不活跃的连接close

    作者:长风 Email:844064492@qq.com QQ群:607717453 Git:https://github.com/zhaohu19910409Dz 开源项目:https://github.com/OriginMEK/MEK 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    1020.表-继承
    1019.模式(限定名)
    1018.行安全策略
    1017.权限
    1016.表结构修改
    1015.【转】oracle rowid and postgresql ctid
    1014.表-系统列
    20201227[java]同构字符串
    oCam_v4850录屏软件
    《软件定义网络中的异常流量检测研究进展》论文笔记
  • 原文地址:https://www.cnblogs.com/zhaohu/p/8762924.html
Copyright © 2011-2022 走看看