• 基于EPOLL+多进程+线程池的server框架设想_程序世界_百度空间


    基于EPOLL+多进程+线程池的server框架设想_程序世界_百度空间

    基于EPOLL+多进程+线程池的server框架设想

    最近,看了几个开源代码的server框架,有了一些自己的想法,把它记下来。

    针对server要求高性能的同时还需要稳定性的特点,有了这样一个构思,建立一个EPOLL+多进程+线程池的server框架,暂且叫它emptyServer(e:epoll,m:muti,p:process,t:thread,y:ycc.哈哈)。

    考虑的出发点如下:

    (1)     为什么用epoll?

    众所周知的原因,这里就不多说了。

    (2)     为什么使用多进程模型?

    在emptyServer框架中,多进程的想法来源于apache和lighttpd。它的作用是多个进程共享监听socket,当有连接过来时,唤醒其中一个进程处理,这样可以保证了emptyServer的稳定性,又可以提高emptyServer的处理能力。

    也许,大家会想,这不就会引起“惊群”问题了吗?linux2.4以后的内核版本,已经解决了“惊群”问题,所以不需要担心“惊群”影响性能。

    注:“惊群”问题,多进程共享监听socket,当有请求过来时,系统会唤醒所有的进程,从而造成系统颠簸使性能严重下降。

    (3)     为什么要使用线程池?

    线程池的作用:线程处理具体的逻辑,不参与主线程的网络IO,通过socketpair与主线程交互。

    使用线程是基于以下的考虑:

    1)       对于耗时比较长的逻辑,如数据库访问、复杂数值计算等,如果不启用另外的线程处理,主线程就会把时间都花在处理逻辑上,就会影响网络IO的处理和其它请求的逻辑处理,从而影响整体性能。

    2)       现在的服务器基本上都是多核多cpu的,通过多线程,可以把线程映射到不同的cpu去执行,充分利用多核多cpu的处理能力。

    下面,给出一个粗略的流程图,打算8月初开始实现emptyServer。

     

  • 相关阅读:
    放弃antd table,基于React手写一个虚拟滚动的表格
    思考:声明式编程与命令式编程
    前端入门指南(菜鸟篇-下)
    前端入门指南(菜鸟篇-上)
    centos7 磁盘管理—— lvm的使用
    Linux 用 sftp scp命令 互传文件
    linux 通过md5查找重复文件
    Linux sort uniq 命令。简单运用
    Linux sed 命令
    shell 脚本,将/etc/目录下所有的软链接文件输出
  • 原文地址:https://www.cnblogs.com/lexus/p/2983664.html
Copyright © 2020-2023  润新知