Wheel

SCTP 库的简述和代码 (4)

試著忘記壹切 提交于 2019-12-06 04:16:47
2 定时器 简单的时间轮. 使用时间轮是因为, 定时器数目可能比较大. 要求使用者周期性调用, p_timer_wheel_hb 缺点是, 不精确. /* Hash table for hold timer list */ static list_header wheel_slot[WHEEL_ELEM]; static unsigned int svd_tick; static int cur_slot = 0; #ifndef WIN32 unsigned int GetTickCount() { struct timeval current; unsigned int cur_time; gettimeofday(&current, NULL); cur_time = current.tv_sec*1000 + current.tv_usec/1000; return cur_time; } #endif unsigned int get_cur_time() { return GetTickCount(); } void p_timer_restart (p_timer_t *new_timer) { int target_slot; list_header *timer_list; assert(new_timer); target_slot = (cur_slot +

如何让Wheel预生成Class

一世执手 提交于 2019-12-04 06:10:59
有话说在前 在上一篇Wheel实例教程 MVC框架Wheel简单实例 中,我们介绍了如何使用Wheel创建一个简单的web应用,但是如果按照上一篇的内容实现的话我们所有的代理类(比如事务的注入,依赖注入,请求转发)都是在运行是生成的,那么这一节将采用另一种方式,就是将代理类预先生成在war包中,这样在server中运行我们的项目的时候就无需动态创建了,这样就非常快速和节省性能。当然采用这种方式我们需要采用mavn来构建的,所以你得有点maven基础才成。 global.properties 我们在上一篇文章中有一行配置的global.properties如下: generator.class.runtime=true 首先我们要将这个值改成false,这就是告诉程序,我不要在运行的时候生成了。 pom.xml 在pom.xml中添加如下内容: <build> <plugins> <plugin> <groupId>cn.wensiqun</groupId> <artifactId>wheel-maven-plugin</artifactId> <version>0.1-SNAPSHOT</version> <executions> <execution> <phase>compile</phase> <goals> <goal>create-proxy-class</goal> <

给你的移动网站加点料:移动旋转菜单的实现方案

半城伤御伤魂 提交于 2019-12-02 16:20:12
在github上看到有人用HTML5 + CSS3 + Javascript实现了jQuery Wheel Menu(旋转菜单),因为本人供职于移动网站的开发,又不是一个专业的前端开发,所以看到这么炫的东东肯定就垂涎三尺,想移植到移动平台,当然最好一句 代码不修改直接移植过来是最省事的,但是最终发现此大牛给出的Demo在移动端上展现是有一定问题的,所以在边看中国好声音的过程中,修改了他的一部分代 码,实现了在移动浏览器上可以自由使用的jQuery Wheel Menu(旋转菜单)。   既然实现了如此绚丽的菜单,那么在移动网站上究竟在怎么样的场景下可以使用呢?其实,淘宝移动主站(m.taobao.com)左下角的“淘” 就是这样一个类似的效果,但是淘宝主站实现的一些绚丽效果有一个让人头疼的问题,就是在移动端没问题,但是在PC端上就是没有任何效果。也许专业的前端能 够接受这件事情,毕竟人家做的移动网站和PC无关的。不过因为本人是一个半路出家的很不专业的假“前端”开发工程师,所以我希望在移动端上实现的一些绚丽 效果当用PC浏览器访问的时候,用鼠标点击代替移动端手指Tap的时候,也同样看到类似的效果。所以,这次玩的jQuery Wheel Menu在移动端和PC端的浏览器上不管你是Click还是Tap都是可以玩的。   那这种旋转式的菜单到底什么场景下使用呢?还不知道吗?我都举例淘宝了

Netty工具类HashedWheelTimer源码走读(三)

两盒软妹~` 提交于 2019-11-30 12:05:43
接上一篇( http://my.oschina.net/haogrgr/blog/490266 ) 8. Worker代码走读. //主要负责累加tick, 执行到期任务等. private final class Worker implements Runnable { private final Set<Timeout> unprocessedTimeouts = new HashSet<Timeout>(); private long tick; @Override public void run() { //初始化startTime, startTime只是一个起始时间的标记, 任务的deadline是相对这个时间点来的. startTime = System.nanoTime(); //因为nanoTime返回值可能为0, 甚至负数, 所以这时赋值为1, Timer中start方法会判断该值, 直到不为0才跳出循环. if (startTime == 0) { startTime = 1; } //唤醒阻塞在Timer.start()方法上的线程, 表示已经启动完成. startTimeInitialized.countDown(); //只要还是启动状态, 就一直循环 do { //waitForNextTick方法主要是计算下次tick的时间,

Netty工具类HashedWheelTimer源码走读(二)

只愿长相守 提交于 2019-11-30 12:05:30
接上一篇( http://my.oschina.net/haogrgr/blog/489320 ) 6. HashedWheelTimeout源码走读. //任务的包装类, 链表结构, 负责保存deadline, 轮数, 等 //继承MpscLinkedQueueNode, 是因为timeous队列是MpscLinkedQueue, 里面对MpscLinkedQueueNode有特殊处理(并发优化) private static final class HashedWheelTimeout extends MpscLinkedQueueNode<Timeout> implements Timeout { private static final int ST_INIT = 0; private static final int ST_CANCELLED = 1; private static final int ST_EXPIRED = 2; private static final AtomicIntegerFieldUpdater<HashedWheelTimeout> STATE_UPDATER; static { AtomicIntegerFieldUpdater<HashedWheelTimeout> updater = PlatformDependent

Netty工具类HashedWheelTimer源码走读(一)

橙三吉。 提交于 2019-11-29 09:48:23
1. 简单介绍. A Timer optimized for approximated I/O timeout scheduling. 关于Timer的介绍可以看看这篇文章, 写得不错 : http://novoland.github.io/%E5%B9%B6%E5%8F%91/2014/07/26/%E5%AE%9A%E6%97%B6%E5%99%A8%EF%BC%88Timer%EF%BC%89%E7%9A%84%E5%AE%9E%E7%8E%B0.html 可以看到, HashedWheelTimer 主要用来高效处理大量定时任务, 且任务对时间精度要求相对不高, 比如链接超时管理等场景, 缺点是, 内存占用相对较高. 2. 简单例子. 1) 引入最新的Netty 5依赖 (不一定需要Netty5以前的版本里HashedWheelTimer就已存在) <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>5.0.0.Alpha2</version> </dependency> 2) 例子代码(LocalTime是Java8的时间类) import io.netty.util.HashedWheelTimer; import java.time.LocalTime