`
godlovesdog
  • 浏览: 99454 次
社区版块
存档分类
最新评论

ngx-push-stream模块源码学习(五)——内存清理

阅读更多
1.定时器
        采用nginx自身的定时器管理机制,具体细节待学习过nginx源码后加以补充
2.channel的生成周期



(0)、初始(诞生)
        发布、订阅均有可能产生channel
  • 发布:向channel以post的形式发布消息时,如果不存在channel则产生
  • 订阅:模块配置允许订阅产生channel的情况下,如果向一个不存在的channel上订阅时则产生

        channel自诞生之日期就是在无奈的等死。。。只要channel被使用一次(发布、订阅)则其寿命被延长一次,保持状态处于“初始”
(1)、死缓
        模块每隔一段时间(默认为11s)会进行内存回收——ngx_http_push_stream_collect_expired_messages_and_empty_channels。如果一个channel既没有存储信息也没有订阅者,那它就是废物了,标记为deleted,设定过期时间为当前时间+一段时间(默认为30s),并将该channel移动到垃圾回收站。。。等死吧,不过别慌,你还有活的可能
(2)保外就医
        如果有人关心你(订阅、发布、统计channel信息)则将处于死缓状态的channel从垃圾堆中还原
(3)、死刑
        除了死缓,还有种机制可以直接将channel判为死刑——以DELETE的方式请求发布通道,则无视该channel的任何亲属关系(存储的信息、订阅者)则直接将其标记为deleted,扔入unrecoverable_channels队列。。。别幻想了,系统会ngx_http_push_stream_alert_worker_delete_channel,通知为该通道工作的ngx worker诛九族(清理该channel的订阅者、存储信息等系统资源)
(4)处决
        执行周期性内存清理时,除了ngx_http_push_stream_collect_expired_messages_and_empty_channels外,还会执行ngx_http_push_stream_free_memory_of_expired_messages_and_channels将过期的channel彻底删除;未过期的channel仍处于死缓状态

3.MSG的生成周期



(0)、初始(诞生)
        发布消息时产生,同时预设其死亡时间(如果配置中设定msg_ttl则预设生命期为此值,否则
(2)、死刑生存期为0——生成即死亡);设定一个buffer清理定时器(默认为1s)来清理msg。
(1)、死缓
        诞生时即等死,在清理buffer时(默认设置为msg诞生1s后)将该消息标记为deleted,扔入messages_to_delete.queue;新队列超长则执行FIFO,最老的MSG判为死刑(标记为deleted,扔入messages_to_delete.queue)。
(3)(4)执行
        对于死缓信息,在下一次垃圾清理(ngx_http_push_stream_free_memory_of_expired_messages_and_channels)时将该过期msg彻底删除。对于死刑信息,在buffer清理定时器到期时将其清除
  • 大小: 16.2 KB
  • 大小: 14.9 KB
分享到:
评论
1 楼 ycye 2013-12-21  
博主好,
我研读了这篇博文,有一块没能理解:在msg的生命周期中,死缓和死刑的区别是什么?
死缓状态也没有能回到初始状态的连线,并且msg被加入死缓和死刑两个队列的条件中都包括buffer清理定时任务的处理。
我刚接触这个模块,还没有看代码,希望博主不吝赐教。

相关推荐

    Angular-ngx-sharebuttons.zip

    Angular-ngx-sharebuttons.zip,角共享按钮角共享按钮,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。

    ngx-datatable-master.zip

    ngx-datatable-master.zip 文件很可能是这个库的源代码压缩包,包含了项目的所有源码、示例、文档等内容。在这个库中,你可以深入理解如何在 Angular 应用中高效地处理和展示大量数据。 首先,`ngx` 前缀是 Angular...

    ngx-datatable.zip

    关于压缩包"ngx-datatable.zip",其中包含了ngx-datatable的源码、示例、文档和其他相关资源。解压后,你可以研究源码学习其内部实现,查看示例了解如何在自己的项目中使用,查阅文档解决遇到的问题。这个压缩包为...

    ngx-pivot-table-源码.rar

    通过深入研究"ngx-pivot-table-源码.zip"中的源代码,开发者可以学习到如何在Angular中构建组件,如何处理数据,以及如何实现交互式表格的功能。这对于提升Angular技能和理解组件化开发有很大的帮助。

    Angular-ngx-device-detector.zip

    Angular-ngx-device-detector.zip,用于检测设备、操作系统和浏览器详细信息的Angular5 库。NGX-device-detector,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。...

    Angular-ngx-ui-loader.zip

    Angular-ngx-ui-loader.zip,多个加载器/旋转器和进度条,用于Angular 5、6、7和8 NGX UI加载器,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是...

    ngx-pinch-zoom:模块提供了使用触摸屏上的手势进行图像缩放和定位的功能

    import { PinchZoomModule } from 'ngx-pinch-zoom' ; @ NgModule ( { imports : [ PinchZoomModule ] } ) 用法 使用时,将图像放入容器中。 请注意视口元标记的参数。 如果您使用“捏缩放”,则需要通过输入以下...

    ngx-leaflet-draw-源码.rar

    这个源码压缩包 `ngx-leaflet-draw-源码.zip` 包含了实现这个功能的所有源代码,这对于想要深入理解其工作原理或者想要对其进行自定义开发的开发者来说非常有价值。 Leaflet 是一个轻量级的JavaScript地图库,它...

    generator-ngx-rocket, 可以扩展 Angular 6 + 企业级项目生成器.zip

    **generator-ngx-rocket** 是一个专为 Angular 6 及以上版本设计的企业级项目生成器,它旨在加速和简化大型复杂项目的初始化过程。通过这个工具,开发者可以快速搭建符合企业标准的基础架构,从而减少重复劳动,提高...

    Angular-ngx-gallery.zip

    Angular-ngx-gallery.zip,角形画廊、旋转木马和灯箱角形画廊,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序...

    Angular-ngx-slick.zip

    Angular-ngx-slick.zip,Angular6 Slick Pluginngx Slick包装纸,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序...

    ngx-tethys:Angular中快速可靠的Worktile Design组件

    ngx-特提斯 基于Worktile Design和Angular的UI组件。 笔记: 这个仓库现在只是公开的,它离开源水平还很远,我们不建议在生产环境中使用它。 我们不保证不会发生重大变化,仅适用于和 入门 安装 跑步 ng add ngx-...

    Angular-ngx-api-utils.zip

    Angular-ngx-api-utils.zip,ngx api实用程序是一个精简的实用程序和帮助程序库,用于快速将任何httpapi(rest、ajax和任何其他)与angular.ngx-api-utils集成,Angularjs于2016年发布,是Angularjs的重写版。...

    ngx-socket-io:Angular的Socket.IO模块

    ngx-socket-io 模块 安装 npm install ngx-socket-io 如何使用 导入和配置SocketIoModule import { SocketIoModule , SocketIoConfig } from 'ngx-socket-io' ; const config : SocketIoConfig = { url : '...

    Angular-ngx-validators.zip

    Angular-ngx-validators.zip,角度2 NGX验证程序的验证程序库,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序...

    generator-ngx-rocket, 可以扩展 Angular 6 企业级项目生成器.zip

    **generator-ngx-rocket** 是一个专为 Angular 6 设计的企业级项目生成器,它旨在简化企业级应用的初始化过程,提供了一种快速搭建、可扩展的框架。这个工具基于 Yeoman,一个广泛使用的代码生成器,允许开发者...

    ngx-bootstrap-development

    ngx-bootstrap-development O

    Angular-ngx-ueditor.zip

    Angular-ngx-ueditor.zip,百度编辑角,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。

    Angular-ngx-scrollspy.zip

    Angular-ngx-scrollspy.zip,Angular ScrollSpy服务您可以使用Angular2服务从窗口或任何其他可滚动元素监视滚动事件。,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入...

    ngx-loading-bar:Angular的自动页面加载进度栏

    @ ngx-loading-bar Angular应用程序(http,http-客户端和路由器)的零配置全自动加载条。 配套 在路线之间导航时显示加载栏。 -显示@angular/common/http请求的进度。 手动管理进度条的核心模块。 演示版 在线...

Global site tag (gtag.js) - Google Analytics