记录自己对EventLoop和性能问题处理的一点心得【转】
转自:http://www.cnblogs.com/lanyuliuyun/p/4483384.html
1、EventLoop
这里说的EventLoop不是指某一个具体的库或是框架,而是指一种程序实现结构。这种结构多是基于IO多路转接的API(select、poll、epoll之类)以reactor模型,实现IO事件处理、timer和异步事件处理。具体常见的库有libev、libevent,以及陈硕(@bnu_chenshuo)的muduo。这些库或是框架基本的原理流程都类似,区别都是在API接口功能和多平台支持之上。这里就不具体的对此进行展开讨论了,接下来说说自己对EventLoop的一点理解,欢迎各路大侠拍砖。
先简单抛出一个自己的结论:现在的程序服务基本上都可以使用EventLoop的结构来驱动。
其原因是需求都近乎于类似,基本上都要处理IO事件进行消息收发与外部进行通讯、都要实现timer来进行定时、都要发起一些异步处理过程。而这些都可以用EventLoop进行抽象。对这些功能实现了统一的抽象实现之后,在此之上实现基础的TcpServer、TcpClient、UDP
Peer就方便的多了,在往上进一步加上各自的业务逻辑,就形成了各种Server、客户端。可以说核心的结构都是类似,细分的差别就体现在内存管理、包收发控制(拥塞控制)、并发模型设计、系统架构Scale和健壮容错能力方面。
如下图所示
虚线框中既是基本的EventLoop的组件功能了。功能丰富一点库会在APP
Sever/APP Client中实现诸如http server/http
request之类的功能了,比如陈硕的muduo,或是精简一点,TCP Server/TCP Client/UDP Peer都没做,只实现了IO
Event Handle、Timer、Async
Event,比如libev。自己分析了muduo实现,模仿其API,也用C杜撰了一套精简的实现,实现了上述框架的的功能,APP的部分具体实现了RTSP
Server/RTSP
Request功能,也在公司里用的挺好,这里要推荐一下muduo,其API是自己见过功能的库中使用最方便的一个(也可能是自己孤陋寡闻,没见过更牛掰的),也促成自己重新造了一个轮子。
2,性能问题问题
自己遇到的性能问题主要是体现在CPU使用率上。在自己最近做的项目中,遇到过三次CPU使用率过高的问题,但问题原因各不相同。这里记录一下
1)
一次是因为软件使用的一个第三方SDK中默认开启了软件解码运算而导致的。发现问题原因所在首先要进行度量,以确定具体是在哪里耗CPU明显。此时自己使用的是process
explorer工具(windows)中线程查看功能,其可以具体的查看一个进程中各个线程的运行情况,包括CPU使用率和调用栈。对此很直接找到问题的元凶。之后联系对应厂商开发人员,对SDK进行修改,关闭默认解码操作,提供开关控制后解决。
2)一次是因为检测了IO句柄上的无用的write事件,而导致代码流程空转所致。经过实际验证,发现该问题可控,当停止所有的网络功能之后,CPU使用率立马回复正常,就基本确定于网络功能有关。解决该问题仍然是先进行度量,这次的度量工具是VS中的性能分析工具,用其对各个函数的调用情况进行采样,很轻松的发现那些函数调用的次数比较多,就直接定位到问题点,经过分析后将write事件监测改为按需进行后解决问题。
3)此种情况准确来时是BUG。第三次是因为代码在一个不常见的处理分支中而陷入了死循环。同样先进行分析发现该现象不可控,整个程序已经完全不能相应更多的控制操作。遂用VS以调试方式将程序跑起来,将问题复现后,将程序暂停运行后恢复运行,重复几次之后,发现每次暂停时执行流程都陷入在同一个地方,就基本确定代码在这个地方陷入死循环了。仔细地分析了代码,结合实际外部触发条件后,找到了bug所在。修改代码重新进行验证测试,问题解决。
记录自己对EventLoop和性能问题处理的一点心得【转】的更多相关文章
- 记录自己对EventLoop和性能问题处理的一点心得
1.EventLoop 这里说的EventLoop不是指某一个具体的库或是框架,而是指一种程序实现结构.这种结构多是基于IO多路转接的API(select.poll.epoll之类)以reactor模 ...
- PolarDB阿里初赛问题记录 PolarDB 阿里 中间件 比赛 性能 工程手册
Contents 这篇纯碎是碎碎念记录. 每个value都是4KB,总共最多会写6400W个value,算下来就是64 * 1000 * 1000 * 4 * 1024 Bytes ≈ 256G. 每 ...
- 记录bigdesk中ElasticSearch的性能参数
定时采集bigdesk中的Elasticsearch性能参数,并保存到数据库或ELK,以便于进行长期监控. 基于python脚本实现,脚本如下: #coding=gbk import httplibi ...
- 【测试记录】EF插入查询性能
介绍 背景什么就不提了,无外乎出现了大数据需要处理.简单的说就是我测试了EF正常的插入以及一个优化小方式而已,然后做了查询记录.其余没有什么,写这篇只是为了记录结果方便以后数据参考吧. 代码介 ...
- [记录]FIO测试磁盘iops性能
FIO测试磁盘iops性能 1.SATA和SAS盘原生IOPS如下: 2.RAID磁盘阵列对应的写惩罚级别: 3.计算功能性IOPS公式如下: 功能性 IOPS=(((总原生 IOPS×写 %))/( ...
- Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...
- 之前做web性能优化的一些个人心得
一个web项目后期的维护主要在于性能方面.数据吞吐量一旦增大各种bug都出来了.那些通过硬件<数据库分表,数据库主从分离,读写分离>等的一些手段此处就不多说了.本文主要在编码方面做一个性能 ...
- 脱O把妹,记录这一周来迁移至MySQL的一些心得
· 背景 公司要把一些老设备退服,一些陪伴我多年的DB要下线了,舍不得.正好借此机会,手贱把自己3个"回收站"DB迁移到MySQL上,也算是赶一把时髦.等真正看着这些老设备下线了的 ...
- 利用GPU改善程序性能的一点心得
1. 硬件方面 a. 流处理器个数 Gpu内部的计算单元个数,决定分析模块实时性的关键因素. 实测效果: gtx760 1152个 Gtx960 1024个 单路1080p运动 ...
随机推荐
- Resharper简单安装及代码覆盖率的测试
Resharper简单安装及代码覆盖率的测试 测试环境:VS 2015 专业版 一.下载Resharper 官方链接:https://www.jetbrains.com/resharper/ 点击下载 ...
- Linux命令(二十) 显示系统内存状态 free
一.命令简介 free 命令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存.共享内存区段,以及系统核心使用的缓冲区等. 二.参数说明 -b 以Byte为单位显示内存使用情况 -K 以KB为单位 ...
- Ubuntu中sublime和Foxit Reader不能使用中文输入法解决方案
虽然Ubuntu下面很多软件同windows下一样,但是经常会出现各种各样的小问题,其中最让人头疼的是软件中的输入法问题. sublime作为一个跨平台的编辑软件,可以支持win,linux和mac系 ...
- MongoDB高级操作(2)
查询方法-常用查询方法 查询多条数据 --db.集合名称.find({条件文档}) 查询一条数据 --db.集合名称.findOne({条件文档}) 结果格式化 --pretty()方法 --db.集 ...
- 【大数据】Hive学习笔记
第1章 Hive基本概念 1.1 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表, ...
- HGOI20180822 五校联考卷
T1 [题目意思]给出下列程序片段,预测程序运行结果 输入文件为T(T<=200)组数据,每组数据有个n(n<=1014) 输出文件为T行,每行一个数据,表示fun(n)的值 simple ...
- suoi14 子树查找 (dfs)
把询问记下来,然后开个桶差分 #include<bits/stdc++.h> #define pa pair<int,int> #define lowb(x) ((x)& ...
- 造成ORA-01843 无效的月份 的一些原因
1) 当我们在一个中文环境的客户端使用如下sql语句INSERT INTO "temptable" ( DELIVER_DATE ) VALUES (TO_DATE('27-Jun ...
- bzoj1485: [HNOI2009]有趣的数列(Catalan数)
一眼卡特兰数...写完才发现不对劲,样例怎么输出$0$...原来模数不一定是质数= =... 第一次见到模数不是质数的求组合数方法$(n,m\leq 10^7)$,记录一下... 先对于$1$~$n$ ...
- Luogu 2762 太空飞行计划 / Libre 6001 「网络流 24 题」太空飞行计划 (网络流,最大流)
Luogu 2762 太空飞行计划 / Libre 6001 「网络流 24 题」太空飞行计划 (网络流,最大流) Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行 ...