Timer的性能优势
2016-06-22 11:21
281 查看
假如有这样一个场景,1个100万用户同时在线的系统,假设有一个Session管理器来管理它们的存亡,每个用户的Session有效时间假设5分钟,通常一个最简单的做法是在一个Session管理器中启动一个Thread去定时校验每个Session是否到达有效期截止时间,将到期的Session清理掉,而这个需求就导致存放Session的字典必须支持并发。而另一种做法就是在每个Session对象的内部去启动一个Timer让Timer在指定时间后去校验自身是否到期,若到期则发出事件通知让管理器去做清理工作。
测试结果,使用Thread的方式CPU一直保持在4%左右,而使用Timer的方式CPU保持在0,内存比Thread方式多用100多mb。按照存储比CPU便宜的标准,即使是内存消耗感觉也是第二种方式会更好一些。
2017年3月9日补充:这篇文章过时了,今天读到篇文章,原来可以用一种叫环形队列的数据结构来处理这种大量的超时任务。参见:http://mp.weixin.qq.com/s/mvFwjgxliwx808Hn_9ruEA。
测试结果,使用Thread的方式CPU一直保持在4%左右,而使用Timer的方式CPU保持在0,内存比Thread方式多用100多mb。按照存储比CPU便宜的标准,即使是内存消耗感觉也是第二种方式会更好一些。
2017年3月9日补充:这篇文章过时了,今天读到篇文章,原来可以用一种叫环形队列的数据结构来处理这种大量的超时任务。参见:http://mp.weixin.qq.com/s/mvFwjgxliwx808Hn_9ruEA。
相关文章推荐
- 浅谈尾递归
- 前端技术:jQuery
- 增加listview的item点击水纹效果
- codeforce A. Alyona and Numbers
- 百度2017暑期实习生编程题-单词接龙
- .NET基于Redis缓存实现单点登录SSO的解决方案
- 15.3节练习
- 区别和详解:jQuery extend()和jQuery.fn.extend()
- 图的几种表示方法
- Arduino学习日记-使用GY-30光照传感器
- 流媒体介绍
- 论代码审查的重要性
- AndroidStudio 常用快捷键
- static全解
- C++之类的成员函数的原理
- 2016.6.22笔记(1)-线程之间的通信
- C#控制Excel Sheet使其自适应页宽与列宽的方法
- Html.Action Html.RenderAction Html.Partial Html.RenderPartial Url.Action Html.ActionLink 大括号和小括号区别
- Android延时的几种常用方式
- 人月神话读书札记