zoukankan      html  css  js  c++  java
  • 基于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。

     

  • 相关阅读:
    SQL------Hint
    JVM——垃圾回收
    JVM——内存结构
    SpringMVC——拦截器,过滤器实现登录拦截
    SpringMVC——参数传递
    SpringMVC——数据乱码问题
    SpringMVC——MVC执行流程底层剖析
    Spring——5种增强方式
    Spring——bean的五种作用域和生命周期
    Spring——多种方式实现依赖注入
  • 原文地址:https://www.cnblogs.com/lexus/p/2983664.html
Copyright © 2011-2022 走看看