timer -- 2




概述延迟任务就是诸如“在 100ms 以后执行”这样的任务,而周期任务则是“每 10ms 执行一次”这样的任务延迟任务与周期任务通常通过 Timer 类负责实现和管理,但是 Timer 类是基于绝对时间而不是相对时间的调度机制,系统时钟的变化会直接影响到 Timer 的执行结果,这是 Timer 的一个明显的缺陷,另一个缺陷在于 Timer 在执行所有定时任务时只会创建一个线程,所有任务的调度延迟时间都是基于上一个任务的结束时间,这样如果某个任务执行时间过长,那么将会破坏其他任务的执行,同时,一旦任务抛出了一个未知的异常,由于 Timer 线程不捕获异常也并不会尝试恢复,因此他会彻底停止执行和调度,这个问题通常被称为“线程泄漏”ScheduledThreadPoolExecutor 是替代 Timer 的一个比较好的组件,他是通过相对时间进行控制的,不依赖于系统时钟,同时任务的每次执行时间都是基于上一次任务的开始时间计算,结合并发的特性,实现了每次调度不依赖于每次实际的任务执行时间,通过 Executors 对象的工厂方法 newScheduledThreadPoo
#技术帖    #龙潭书斋    #线程    #线程池   
简介libevent 是一个轻量级的开源高性能网络库,很多开源软件包括memcached 都是使用他作为网络层组件他只专注于网络层,采用事件驱动的模式,实现了对 IO 事件、定时器事件、信号事件的处理同时,他对 windows、linux、BSD 等多个平台的不同接口进行了封装由于最近在阅读 nginx 源码的事件处理模块,所以对同样是事件驱动模式的 libevent 很感兴趣,打算研读一下他的源码 事件驱动模式 -- Reactor 模式众所周知,apache 作为应用 web 服务器使用的是同步多进程模型,即在进程池中创建多个进程,当请求到来时,每个进程单独处理一个请求,这样的好处在于进程之间相互独立,服务不会因为某个进程的超时或其他问题而随之出现问题,但是这样的模型占用了大量的系统资源,特别是在大量并发请求到来的时候,大量的进程启动会导致系统资源占用过大而 nginx 以及 libevent 这样事件驱动模型的异步非阻塞模型的网络层应用,使用的是 Reactor 的模式进行请求的处理,只启动有限的进程,比如 nginx 建议启动与
#技术帖    #web    #服务器    #技术分享   



京ICP备15018585号