- 博客(15)
- 收藏
- 关注
原创 ZLMediaKit源码分析(一)启动
常用的定时器有最小堆、时间轮、红黑树,ZLMediaKit采用std::map红黑树实现,key保存时间,value保存std::function,这一块的实现存在争议。单例模式,初始化线程池,EventPollerPool 初始化了线程池的大小 ,_threads遍历使用。用作会话管理,用来处理每一种协议的拆包、解析、封装等功能,事件与已经链接的fd的读、写、关闭事件属于同级事件。首先会设置线程池的大小,线程池大小默认是。3、线程池的item poller,执行。,执行为当前poller的fd设置。
2022-11-23 15:07:35
2421
转载 精简设计模式
总体来说设计模式分为三大类:创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
2022-09-14 10:15:35
260
原创 JetLinks 的网络组件注入方式
当一个BeanPostProcessor的实现类注册到Spring IOC容器后,对于该Spring IOC容器所创建的每个bean实例执行postProcessAfterInitialization、postProcessAfterInitialization。Spring容器通过BeanPostProcessor给了我们一个机会对Spring管理的bean进行再加工。比如:我们可以修改bean的属性,可以给bean生成一个动态代理实例等等。一些Spring AOP的底层处理也是通过实现BeanPostP
2022-06-14 14:08:52
346
原创 nginx-1.9.2 调试
生成cmake文件调试1、在auto的根目录下创建名称为cmake的文件#!/usr/bin/env bash\# NGX_CMAKE_FILE=$NGX_OBJS/CMakeLists.txt# ********此处生成到项目跟目录,修改$NGX_OBJS/CMakeLists.txt为CMakeLists.txtNGX_CMAKE_FILE=CMakeLists.txtNGX_CMAKE_TMP=$NGX_OBJS/tmp#output includescmake_ngx_incs=`
2022-04-20 17:00:25
3999
1
原创 nginx源码分析(一) 启动篇nginx.c
一、Nginx的启动过程Nginx的主流程的实现函数在./src/core/nginx.c文件中,以下是流程图,减少一切非必要的代码说明二、主要命令命令-v 版本号;-?,-h 帮助 ;-t -T 测试配置;-q 退出;-s 发送信号;-p 设置编译后的路径;-c 配指文件名称;-g 设置全局信号nginx -s reloadnginx -s reopennginx -s stopnginx -s quit...
2022-04-19 13:57:27
2738
2
原创 Redis源码分析(四)字典-dict
概述Redis中的dict字典可以理解为key和value映射关系的升级版本的散列链表。dict字典的出现是为了解决算法中的查找问题,在实际开发中查找主要使两种结构体,他们分别是使用Map结构的树与Hash表。使用Hash表找到的优势是,在没有Hash碰撞的情况下,查找性能能达到O(1),并且它的内部实现也比较简单。dict字典借鉴了多个经典的算法实现Hash的key计算。dict字典在发生冲突时采用拉链法解决冲突,它的内部维护了两个hash表,当装载因子(节点数和字典大小之间的比率接近 1:1,且已使用
2021-11-08 16:36:51
300
8
原创 Redis源码分析(三)双向链表-adlist
Redis源码分析(三)双向链表-adlist)概述内存结构结构体内存图概述Redis中的list结构的数据结构是双向链表,双向链表也叫双链表,是链表的一种,每个数据结点中都有两个指针,分别指向直接后继和直接前驱。优点:从双向链表中的任意一个结点开始,都可以很方便地访问前驱结点和后继结点。缺点:相比较于单链表的删除、增加节点,操作略微复杂,而且在内存上,需要多分配一个指针存储空间。内存结构结构体可以看到typedef struct listNode { // 前置节点 st
2021-11-04 21:45:13
434
4
原创 Redis源码分析(二)动态字符串-sds
这里写目录标题概述概述面向过程的C语言没有可变长的字符串,而面向对象语言里,Java有的final String字符串,StringBuffer、StringBuilder可变长对象,C++中有std::string字节流对象。Redis在sds.c、sds.h文中实现了动态可变字符串。...
2021-11-01 12:51:40
423
6
原创 Elasticsearch 手册
基础概念Elasticsearch对应MySQL的对应关系如下: Elasticsearch MySQL 索引库(indices) Database 数据库 类型(type) Table 数据表 文档(Document) Row 行 域字段(Field) Columns 列 ...
2021-10-28 09:52:30
1007
1
原创 Redis源码分析(一)内存池-zmalloc
Redis 源码分析(一)内存池-zmalloc概述新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入概述大家好,我是一名萌新,在文章分享有不正确的、语言比较晦涩的地方,欢迎大家明确提出来。本人经历:过去一年在某高校的J
2021-10-27 22:19:55
860
7
原创 bladeX评价(深度好文)
序我承认有些架构师真的技术很强,但是一味的做无意义的封装,增加上手成本,背离了简化开发的初衷。开篇bladex 这个框架是我做第一个商业项目用的框架,项目经理当时花了五千多买的框架,比较重量级别(臃肿),比如:在权限管理安全使用自研框架,对myabtis-plus框架做一些憨厚的封装,大量的var1、var2变量,在持久化框架上我还可以忍受,但是在安全框架使用自研我无法忍受!这个框架对于大型企业的与中小型企业的架构理解不够透彻,做了一些华而不实的封装。他的单体版本商业版本,我不明白为何也要加入重量级别
2021-04-23 13:23:28
17852
59
原创 netty默认线程源码的刨析
首先在workerGroup中打下断点我并没有指定bossGroup的线程个数,但是看到bossGroup中children线程却有16个,这个16是从哪里来的呢?接着向下看。3. 看到这段代码,这是一个三元表达式,如果不指定线程,nThreads的值将会是netty给的一个默认值,接下来看看这个默认值到底是什么。4. 线程数原来就是cpu核数*2NettyRuntime.availableProcessors() * 2...
2021-02-23 18:38:33
336
转载 真正的高手,都是“反算法型”的人!(深度)
真正的高手,都是“反算法型”的人!(深度)很多人还没有意识到,人类真正的敌人,不是生态环境,不是经济危机,不是核武器,而是“算法”。算法的本质是“大数据”。之前,我们说大数据是未来的石油。而现在我们发现大数据正在试图掌控人类。这个世界正在被算法一点点吞噬,人们和“算法”的斗争,才是一场是决定人类前途和命运的战斗。1什么是算法呢?它不停的收集你的数据,站在高维解读你、透视你,审视你,知道你喜欢什么,想要什么,想干什么,然后帮你设定好行为路线,冥冥之中将你彻底掌控。比如当我们打开手机,平台马上就会
2020-05-19 08:50:24
1821
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人