首页 > 系统相关 >Linux——网络(3)

Linux——网络(3)

时间:2024-08-27 18:52:05浏览次数:11  
标签:文件 epoll int 网络 描述符 fd 事件 Linux

一、服务器

1、单循环服务器

        服务器在同一时刻只能响应一个客户端的请求

2、并发服务器模型

        服务器在同一时刻可以响应多个客户端的请求

3、TCP和UDP

        UDP:  无连接

        TCP:   有连接
            1).多进程
            2).多线程
            3).IO多路复用:
                  为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,
                  使进程不阻塞于某个特定的 I/O 系统调用。
             优势:
                  系统开销小,系统不需要建立新的进程或者线程,也不必维护这些线程和进程。

二、Linux系统IO模型

1.阻塞IO

  •         scnaf
  •         getchar
  •         fgets
  •         gets     
  •         read
  •         recv
  •         recvfrom

        1).可以实现多任务同步(多个事件相互影响)
        2).可以节省CPU资源开销,提高执行效率

2.非阻塞IO

  •         获取文件描述符属性(fcntl---------flag)      
  •         为文件描述符添加非阻塞属性
  •         设置文件描述符属性(fcntl)

        1).可以访问多个IO事件
        2).配合轮询操作,浪费CPU资源

3.信号驱动IO

        1).实现异步IO操作,节省CPU开销
        2).只能针对比较少的IO事件
                   为IO设备增加信号驱动属性(O_ASYNC)
                   关联SIGIO信号到对应进程 (fcntl(fd, F_SETOWN, getpid());)
                   注册SIGIO处理函数(signal)    

4.多路复用IO

  1).select

         缺点:
            1.select监听文件描述符最大个数为1024    (数组)     O(n)
            2.select监听的文件描述符集合在用户层,需要应用层和内核层互相传递数据
            3.select需要循环遍历一次才能找到产生的事件
            4.select只能工作在水平触发模式(低速模式)无法工作在边沿触发模式(高速模式)   

  2).poll

         缺点:
            1.poll监测文件描述符不受上限限制  (链表)   O(n)
            2.poll监听的文件描述符集合在用户层,需要内核层向用户层传递数据
            3.poll需要循环遍历一次才能找到产生的事件
            4.poll只能工作在水平触发模式(低速模式)无法工作在边沿触发模式(高速模式)            

  3).epoll

         优点:
            1.epoll创建内核事件表,不受到文件描述符上限限制    (红黑树)  O(logn)        
            2.epoll监听的事件表在内核中,直接在内核中监测事件效率高
            3.epoll会直接获得产生事件的文件描述符的信息,而不需要遍历检测 
            4.epoll既能工作在水平触发模式,也能工作在边沿触发模式

  4).操作方法

        1)创建文件描述符集合
        2)添加关注的文件描述符到集合中
        3)监测IO事件

  5).函数接口

    1.fcntl

      int fcntl(int fd, int cmd, ... /* arg */ );
      功能:
                设置文件描述符属性 
      参数:
                fd:文件描述符 
                cmd:F_GETFL        获得文件描述符属性
                F_SETFL        设置文件描述符属性 
      返回值:
                F_GETFL:
                    成功返回获得的属性
                    失败返回-1 
                F_SETFL:
                    成功返回0 
                    失败返回-1 

        (O_NONBLOCK   非阻塞        O_ASYNC      异步方式)
        
     修改IO属性:
          1)获取原有属性
          2)增加新的属性
          3)设置新的属性

        int flag = fcntl(fd, F_GETFL);
        flag = flag | O_NONBLOCK;  //增加非阻塞属性                                                                                  flag = flag & ~O_NONBLOCK; //减去非阻塞属性
        flag = flag | O_ASYNC;   //增加异步属性
        fcntl(fd, F_SETFL, flag);

    2.select 

      int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);
      功能:
                监听文件描述符集合
      参数:
                nfds:监测的文件描述符上限值(最大文件描述符的值+1)
                readfds:读文件描述符集合
                writefds:写文件描述符集合
                exceptfds:异常条件的描述符集合
                timeout:设置超时时间
                NULL:一直等待
                    
      返回值:
                成功返回产生事件文件描述符个数
                失败返回-1 
                定时时间到达仍没有事件产生返回0 
    

  •        void FD_CLR(int fd, fd_set *set);        //将fd从文件描述符集合中清除
  •        int  FD_ISSET(int fd, fd_set *set);       //判断文件描述符fd是否仍在文件描述符集合中
  •        void FD_SET(int fd, fd_set *set);        //将fd加入文件描述符集合中
  •        void FD_ZERO(fd_set *set);               //文件描述符集合清0 
    3.poll

      int poll(struct pollfd *fds, nfds_t nfds, int timeout);
      功能:
                监听文件描述符集合中的事件
      参数:
                fds:文件描述符集合事件数组首地址
                nfds:事件个数
                timeout:超时时间
      返回值:
                成功返回产生事件的文件描述符个数
                失败返回-1 
                超时时间到达仍没有产生事件返回0 

    epoll模型:
      1)epoll_create 创建epoll文件描述符集合
      2)epoll_ctl  添加关注的文件描述符
      3)epoll_wait 监控io事件
      4)epoll_ctl  从事件集合中删除完成的文件描述符

    4.epoll_create

      int epoll_create(int size);
      功能:
                创建一个监听事件表(内核中)
      参数:
                size:监听事件最大个数
      返回值:
                成功返回非负值:表示epoll事件表对象(句柄)
                失败返回-1 

    5.epoll_ctl

      int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
      功能:
                在监听事件表中新增一个事件
      参数:
                epfd:事件表文件描述符 
                op:EPOLL_CTL_ADD        新增事件
                     EPOLL_CTL_MOD        修改事件 
                     EPOLL_CTL_DEL        删除事件
                fd:文件描述符 
        events:事件相关结构体
      返回值:
                成功返回0 
                失败返回-1 

     events:
        EPOLLIN         读事件
        EPOLLOUT     写事件
        EPOLLET        边沿触发    
        LT                    水平触发

    6.epoll_wait

      int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);
      功能:
                监听事件表中的事件,并将产生的事件存放到结构体数组中
      参数:
                epfd:          事件表文件描述符
                events:       存放结果事件结构体数组空间首地址 
                maxevents:最多存放事件个数
                timeout:      超时时间
                -1:               阻塞等待直到有事件发生 
      返回值:
                成功返回产生事件个数
                失败返回-1 
                超时时间到达没有事件发生返回0 

标签:文件,epoll,int,网络,描述符,fd,事件,Linux
From: https://blog.csdn.net/qq_63574400/article/details/141609664

相关文章

  • linux系统内存不足时, 系统杀死程序 哪儿查看日记
    下面是由ai回答的:当Linux系统内存不足时,系统可能会通过OOMkiller(Out-Of-Memorykiller)机制自动杀死一些进程以释放内存。要查看因内存不足而被系统杀死的程序,可以通过查看系统日志来获取相关信息。根据搜索结果,以下是一些常用的方法来查看系统日志中的相关记录:使用dmesg......
  • 网络安全的历史
    如今,网络安全几乎成为各大公司和利益相关者关注的焦点。但在早期,网络安全的概念非常模糊。直到多年以后,由于网络攻击和危险实体威胁的频繁发生,网络安全的发展才受到重视。这些措施的发展成为了网络安全的演变。网络安全起步阶段(1960-80年)20世纪60年代是计算机和网络的......
  • 网络篇
    1、HTTP响应码有哪些?分别代表什么含义?200:成功,Web服务器成功处理了客户端的请求。301:永久重定向,当客户端请求一个网址的时候,Web服务器会将当前请求重定向到另一个网址,搜索引擎会抓取重定向后网页的内容并且将旧的网址替换为重定向后的网址。302:临时重定向,搜索引擎会抓取重定......
  • 非常全的Linux常用命令
    Linux常用命令 系统信息 arch显示机器的处理器架构uname-m显示机器的处理器架构uname-r显示正在使用的内核版本 dmidecode-q显示硬件系统部件-(SMBIOS/DMI) hdparm-i/dev/hda罗列一个磁盘的架构特性 hdparm-tT/dev/sda在磁盘上执行测试性读取操作 cat/p......
  • Linux——系统中断
    目录1.什么是系统中断2.为什么要有系统中断2.1举个生活中的例子3.中断会带来什么问题3.1问题3.2生活例子——以取外卖为例:假如你订了2份外卖4.回到系统中的软中断?5.系统中断总结6.大量的网络小包会导致性能问题,为什么呢?1.什么是系统中断中断是系统用来响应硬件设备请求的一种......
  • 网络篇
    1、HTTP响应码有哪些?分别代表什么含义?200:成功,Web服务器成功处理了客户端的请求。301:永久重定向,当客户端请求一个网址的时候,Web服务器会将当前请求重定向到另一个网址,搜索引擎会抓取重定向后网页的内容并且将旧的网址替换为重定向后的网址。302:临时重定向,搜索引擎会抓取重定......
  • Linux进程管理——进程状态、僵尸进程、孤儿进程、系统中断
    目录1.基础1.1什么是进程1.2程序和进程的区别1.3进程的生命周期1.3.1进程生命周期图1.3.2进程生命流程说明1.4僵尸进程与孤儿进程区别2.监控进程状态2.1静态查看进程2.1.1ps命令2.1.2STAT状态含义2.2动态查看进程2.2.1top命令2.2.2top常用按键显示介绍2.2.3top每列含义详解2.2.4什......
  • 11.网络管理技术
    13-1SNMP管理模型与配置命令3-4分包括大题向右request向左response默认是version1(不设置的话)13-2ICMP报文协议类型13-3windows2003网络管理release释放租约renew续约与本地有关13-4网络攻击与漏洞查询D13-5......
  • 前馈神经网络
    前馈神经网络(FeedforwardNeuralNetwork,FNN)是一种基础的人工神经网络结构,其信息流动是单向的,从输入层(inputlayer)通过隐藏层(hiddenlayers)最终流向输出层(outputlayer),没有反向的连接。以下是前馈神经网络的一些关键特点:层次结构:前馈神经网络由多个层次组成,每个层次包含若干......
  • 计算机网络笔记分享(第一章 概述)
    计算机网络的定义:若干节点(结点)和连接这些节点(结点)的链路构成网络一些互相连接的自治的计算机的集合通用的、可编程的硬件互连而成网络的功能:连通性、共享(信息、硬件、软件)三个概念:网络:许多计算机连接在一起;互连网:许多网络通过路由器连接在一起;互联网(因特网):全球最大的......