码迷,mamicode.com
首页 > 其他好文 > 详细

实时图像压缩系统

时间:2017-02-12 20:58:11      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:流程   lru   参数   删除   内存   函数   事件   无法   libevent   

  • 软件基本介绍
    •      Bolt是一个实时裁剪压缩图片服务器,其比nginx的image_filter快2倍以上,主要是因为Bolt对一张图片只做一次处理,就算在处理图片的过程中,其他的客户端也在请求此图片,Bolt也能保证只有一个线程在处理此图片。

          另外Bolt替换缓存机制,处理过的图片不再进行第二次处理,除非内存不足的时候,Bolt才会处理LRU算法来删除缓存中的图片,在启动Bolt的时候可以使用“--max-cache”启动参数来设置最大内存限制。Bolt使用LRU算法来淘汰缓存的图片,也就是说一般只会淘汰较少访问的图片,这就可以很好的限制Bolt的内存使用。

  • 软件开发流程:
    •   主要流程: 
      • 解析命令行命令
      • 加载基本设置选项,利用守护进程守护设置属性(当系统退出的时候,设置属性才会清空)
      • 初始化所有信号集合,将SIGPIPE信号加入信号集(SIGPIPE信号:当服务器退出,客户端依然向服务器发送数据的时候,就会返回一个这个信号,表示服务器已经关闭无法接收数据)
      • 调用函数将信号全部在主进程中进行处理,这样就是将异步信号处理变成了同步信号处理。(方法:利用线程一个线程处理信号,同时其他线程干其他的,这个线程不会干扰其他线程)
      • 初始化日志文件
      • 初始化服务器
        • 创建基本的变量,用哈希表(自己实现的哈希表,参考C源码实现)去存储图片缓存和等待的处理的图片,用双向链表存储其他数据
        • 通过非阻塞模式创建套接字,同时利用libevent的事物机制与socke监听套接字实现安全的多线程机制,用事物对线程进行管理(对图片缓存和图片是否重复进行管理);
      • 初始化连接
      • 初始化工作进程
        • 利用libevent的事件机制和ImageMagick库实现对图片的压缩处理,同时通过线程互斥锁来处理每一张图片(如果不重复则加入map,否则删除加入最新的),这样就保证了图片处理是通过每一个单线程进行处理的,加快了处理速度。

      • 通过libevent库的timeve,设置定时机制,记录每一张图片处理之后的最近使用时间,生成LRU淘汰算法机制(当内存不够的时候根据LRU算法(一个小时以内的不用淘汰)进行淘汰),释放了一部分内存。

实时图像压缩系统

标签:流程   lru   参数   删除   内存   函数   事件   无法   libevent   

原文地址:http://www.cnblogs.com/Kobe10/p/6391653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!