前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >服务器模型小结(未完成)

服务器模型小结(未完成)

作者头像
王亚昌
发布2018-08-03 15:32:34
3400
发布2018-08-03 15:32:34
举报

1. 单进程同步IO(迭代服务器)

    server每次accept一个请求,收包,完成业务处理逻辑后回包,完成整个请求的处理后,才能继续接入下一个请求。这种server模式仅适用于业务处理

2. 父进程+动态创建子进程

    父进程accpet连接,有新连接到来时fork一个进程,然后继续accept,等待新的连接。业务逻辑由子进程处理,处理完后子进程exit,每个子进程只处理一个连接。由于父子进程共享accept操作返回的连接fd,因些子进程可以方便的拿到connfd并进行收发数据包的操作。

    大致伪代码如下:

listenfd = socket();  
bind();  
listen();  
while(1)  
{  
    newsockfd = accept();  
    if (error) continue;  
    if ((childpid = fork()) == 0) {  
        close(listen);  
        process(newsockfd);  
    }  
}  

3. 预创建进程池-子进程竞争accept,有惊群效应

    父进程启动后预先prefork一部分子进程,子进程都阻塞在accept,有新连接到来时,子进程竞争accept,竞争到的子进程负责这一次的业务逻辑处理,处理完成后继续阻塞在accpet上。

    可以使用锁进行同步,以避免惊群效应。

4. 父进程+预创建进程池, 父进程accept,子进程负责处理,规避了惊群效应

    父进程可通过管道的方式传入套接字给子进程,并且父进程需要维护子进程当前状态,根据UNP1测试,这种方式性能较差。

5. 单进程IO复用

    采用select/poll/epoll等IO复用技术,只使用一个进程,当有请求可读时,读请求并处理,处理后回包,这种服务器仅适合小包请求比较多,并且业务逻辑处理不需要阻塞的服务器。

6. 单进程接入+处理子进程池

    使用IO复用技术启用proxy进程负责收发包,收到的请求放到共享内存或管道中,处理子进程池中每个进程都阻塞于读管道请求上,一旦有请求到达,读请求,处理完成后写回管道中,由proxy回包给客户端。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010年05月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档