基于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。

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

  1. 高并发的epoll+线程池,epoll在线程池内

    epoll是linux下高并发服务器的完美方案,因为是基于事件触发的,所以比select快的不只是一个数量级. 单线程epoll,触发量可达到15000,但是加上业务后,因为大多数业务都与数据库打交道 ...

  2. 一文搞懂线程池原理——Executor框架详解

    文章目录 1 使用线程池的好处 2 Executor 框架 2.1 Executor 框架结构 2.2 Executor 框架使用示意图 2.3 Executor 框架成员 2.3.1 Executo ...

  3. hystrix 源码 线程池隔离_基于hystrix的线程池隔离

    hystrix进行资源隔离,其实是提供了一个抽象,叫做command,就是说,你如果要把对某一个依赖服务的所有调用请求,全部隔离在同一份资源池内 对这个依赖服务的所有调用请求,全部走这个资源池内的资源 ...

  4. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

  5. 开源项目SMSS开发指南(二)——基于libevent的线程池

    libevent是一套轻量级的网络库,基于事件驱动开发.能够实现多线程的多路复用和注册事件响应.本文将介绍libevent的基本功能以及如何利用libevent开发一个线程池. 一. 使用指南 监听服 ...

  6. 学习笔记(35续):Python网络编程并发编程-基于gevent及线程池实现的并发套接字通讯

    1.基于线程池实现并发套接字通讯:因为套接字涉及地是I/O密集模型,因此使用多线程会有高效率 ''' 服务器 '''#基于线程池完成并发的套接字通讯 from socket import * from ...

  7. C++强化之路之线程池开发整体框架(二)

    一.线程池开发框架 我所开发的线程池由以下几部分组成:  1.工作中的线程.也就是线程池中的线程,主要是执行分发来的task.  2.管理线程池的监督线程.这个线程的创建独立于线程池的创建,按照既定的 ...

  8. Java多线程学习(八)线程池与Executor 框架

    历史优质文章推荐: Java并发编程指南专栏 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 目录: [TOC] 本节思维导图: ...

  9. 【并发编程】线程池及Executor框架

    文章目录 1.为什么要使用线程池 2.线程池创建线程 3.ThreadPoolExecutor类 4.深入剖析线程池实现原理 5.线程池使用示例 1.为什么要使用线程池 诸如 Web 服务器.数据库服 ...

最新文章

  1. 百度宣布:搜索业务总裁向海龙离职,另回购10亿美元股份
  2. case when else 默认随机_SQL高级知识——CASE的用法
  3. 使用cert-manager实现Ingress https
  4. ScrollView内嵌ListView或GridView的滑动处理
  5. 给我往死里贪——HRBUST - 1167-每种面值的货币要多少
  6. 仿Office的程序载入窗体
  7. UE4学习-AI导航网格的创建及修改
  8. qt中如何模拟按钮点击_如何快速在 Shopify 中加入按钮
  9. linux上安装telnet服务器:linux vmvare虚拟机 安装telnet redhat9
  10. DataGridView控件 1129
  11. python代码编辑器PyCharm快捷键补充
  12. 知道对方IP,你该这样入侵(附:如何隐藏IP地址)
  13. 网络---NAT技术与代理服务器调研
  14. android 8.0自定义全局对话框,Android 8.0如何完美适配全局dialog悬浮窗弹出
  15. 抛物线交点式公式_初一年级二次函数公式:顶点式、交点式、两根式
  16. 高并发下的Nginx优化
  17. 字节辟谣被裁员工与 HR 互殴;苹果头显多个新功能曝光;谷歌希望 RISC-V 成为 T1 级 Android 架构|极客头条...
  18. petalinux2018.3安装步骤
  19. 普及篇:什么是瀑布模型?
  20. 【Windows网络连接问题】无法连接到这个网络

热门文章

  1. edittext 无法输入内容_掌握其中1个Excel小技巧,你就不用再担心会重复录入内容了。...
  2. 小小c语言贪吃蛇思路,【图片】C语言小游戏~贪吃蛇【c语言吧】_百度贴吧
  3. 什么电脑的牌子好用_什么牌子的盘点机好用?
  4. Oracle sqlserver mysql的自增变量设置
  5. Java讲课笔记22:Set接口及其实现类
  6. Python数据分析学习笔记:Python数据可视化入门
  7. Java案例:装载与发射子弹问题
  8. gtx780有html接口吗,笔记本玩转游戏大作 达人外接GTX780Ti
  9. 杨辉三角、组合数 性质的探究
  10. 2017.2.19 loli测试