常用服务器模型-001

CS架构中,常见的几种服务器模型,可能有许多错误,请各位朋友拍砖。

1、

    进程模型: 单进程、单线程处理请求。

    I/O  : 阻塞read,write。

    这种模型,同一时刻只能响应一个客户端请求;处理完一个客户端请求才能为 下一个请求服务。

   这一般称为迭代服务器。在UNP这本数上,最前面的几章就有介绍。

    

2、

   进程模型:单进程、单线程。

   I/O: 利用I/O多路复用例如poll ,select ,epoll等,+非阻塞socket。同一时刻也只能处理一个客户端的请求。但是可以在一个时间段可以为多个客户端请求进行服务。

   利用I/O复用,不会因为一个客户阻塞而阻塞其他客户端。

3、

   fork 进程:

   父进程中 循环accept,收到客户端发起的连接后,fork出子进程,一个子进程为一个客户端请求服务。


4、pthread_create 线程。

      主线程中循环accept,收到客户端发起的连接后,create子线程,一个子线程为一个客户端请求进行服务。     


5、pre_fork,进程池

     进程模型:

      在服务器启动时,父进程便预先创建多个子进程。

5.A 

       父进程负责accept,收到客户端的连接请求,便将socket fd传递给某一个子进程,可以利用unix socket等方式。

      子进程再为客户端请求服务。

     

      子进程可以利用普通的阻塞式I/o ,这样每个子进程只有在一个客户端请求处理完成后,才能处理一个客户端请求。

      

      子进程可以利用 I/O多路复用,例如select ,poll, epoll等,这样每个子进程可以在同一时间段为多个客户端请求服务。

5.B

      每个进程都调用accept ,可以利用锁保护、也可以不利用锁保护。会有惊群,一个连接到来,可能唤醒多个进程。

       进程accept返回后,便为客户端请求服务。进程在处理完一个请求后,才能处理下一个请求。


6、线程池。

      进程模型:

      服务器启动时,主线程预先创建多个子线程

6.A  

     每个线程各自accept,使用互斥锁保护accept调用,(可能根据不同的内核,有的不需要锁保护)

     线程accept与客户端三次握手成功后,便为客户端服务,线程在处理完一个请求后,才能处理下一个请求。

6.B

    主线程负责accept,accept成功以后将socket fd传递给某一个子线程,因为父子线程在同一进程,共享文件描述符,有各种方法传递描述符号,比如pipe等。

     

     子线程  收到描述符号后 ,利用阻塞I/O ,那么同一时间段只能为一个客户端请求服务,只有再一个请求处理完毕后,才能为下一个请求服务。

      

     子线程利用多路I/O复用,这样同一时间段就可以处理多个客户端请求。

       

优缺点:

               日后再说。。。

         

   

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值