- 博客(438)
- 资源 (9)
- 问答 (1)
- 收藏
- 关注
转载 Openresty Lua协程调度机制
Openresty Lua协程调度机制 - 猫猫哥 - 博客园写在前面OpenResty(后面简称:OR)是一个基于Nginx和Lua的高性能Web平台,它内部集成大量的Lua API以及第三方模块,可以利用它快速搭建支持高并发、极具动态性和扩展性的Web应用、Web服务或动态网关。OR最大的特点就是,将Lua协程与Nginx事件驱动模型及非阻塞I/O结合起来。使用户可以在handler中使用同步但是依然是非阻塞的方式编写其应用代码,而无需关心底层的协程调度以及与Nginx事件驱动模型的交互..
2022-04-13 14:24:31
1380
原创 在 OpenResty 里实现进程间通讯
在 Nginx 里面,每个 worker 进程都是平等的。但是有些时候,我们需要给它们分配不同的角色,这时候就需要实现进程间通讯的功能。轮询一种简单粗暴但却被普遍使用的方案,就是每个进程划分属于自己的 list 类型的 shdict key,每隔一段时间查看是否有新消息。这种方式优点在于实现简单,缺点在于难以保证实时性。当然对于绝大多数需要进程间通讯的场景,每 0.1 起一个 timer 来处理新增消息已经足够了。毕竟 0.1 秒的延迟不算长,每秒起 10 个 timer 开销也不大,应付一般的通信
2021-11-29 17:50:03
654
原创 IT架构师绝对不能错过的34张史上最全技术知识图谱
转发:https://blog.youkuaiyun.com/qq_43083284/article/details/86476309?utm_term=%E6%9C%80%E5%85%A8%E6%8A%80%E6%9C%AF%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-4-86476309&spm=30
2021-03-08 16:24:34
350
原创 lua 堆栈介绍
一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图:lua的栈类似于以下的定义, 它是在创建lua_State的时候创建的: TValue stack[max_stack_len] // 欲知内情可以查 lstat...
2020-11-23 12:03:49
5060
2
原创 nginx lua 性能分析
ngx lua 性能分析主要依赖动态追踪技术实时抓取获得函数调用栈的耗时占比情况主要介绍相关工具安装使用关于动态追踪 这有篇看不大懂的bloghttps://openresty.org/posts/dynamic-tracing/工具安装https://github.com/openresty/openresty-systemtap-toolkit.gitngxlua性能分析https://github.com/openresty/stapxx#lj-lua-stackssyst...
2020-11-04 11:24:43
567
原创 git submodule的坑
前言对于一些比较大的工程,为了便于复用,常常需要抽取子项目。例如我开发的猿题库客户端现在包括3门考试,客户端涉及的公共UI、公共底层逻辑、公共的第三方库、以及公共的答题卡扫描算法就被我分别抽取成了子项目。这些子项目都以git submodule的形式,增加到工程中。在使用了git submodule一段时间后,我发现了一些submodule的问题,在此分享给大家。更新submodule的坑submodule项目和它的父项目本质上是2个独立的git仓库。只是父项目存储了它依赖的submodule项
2020-10-10 11:03:47
2248
转载 关于 Lua 内存泄漏的检测
引用:https://www.cnblogs.com/yaukey/p/unity_lua_memory_leak_trace.html 前一阵开始和同事一起优化内存,首先是优化 Lua 内存,因为发现每次战斗完后 Lua 内存非常大,从 3M 左右在经过了10次左右的战斗后,会暴增到近 100M,很明显是有内存泄漏。 然后我正式启动该工作,基本思路就是递归遍历内...
2020-02-19 23:27:56
1843
原创 doxygen使用-快速阅读代码
https://blog.youkuaiyun.com/joyjj0218/article/details/48084543https://www.linuxidc.com/Linux/2015-04/116607.htmhttps://www.ibm.com/developerworks/cn/aix/library/au-learningdoxygen/#list12需要修改的配置项如下...
2019-10-17 16:12:57
313
转载 API网关Kong学习笔记
参考https://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/11/08/kong-features-06-production-and-benchmark.html目录 说明 相关笔记 订正 用siege进行测试 测试结果 测试环境 带宽测试方法 请求端到Kong的带宽 Kong与Kubernetes集群中的Pod之间的...
2019-07-19 14:50:02
449
转载 深度解析Tengine的调试与资源监控方法论(转)
https://blog.youkuaiyun.com/maoreyou/article/details/80668684
2019-04-30 16:52:18
170
转载 lua debug强大库
https://tboox.org/cn/2017/01/12/lua-profiler/之前在给xmake做构建的效率优化的时候,需要对lua脚本的api调用性能进行分析,分析出最耗时一些lua调用api, 找出性能瓶颈,来针对性地进行优化,那么问题来了,如果对lua脚本像c程序那样进行profile呢?我们现在看下最后实现完的最终效果: 4.681, 98.84%, ...
2019-03-28 14:06:49
1998
转载 关于vim-go配置后 tab为四个空格
配置好vim-go后,发现之前vimrc的设置tab为四个空格不好使(首先说明环境 并不干净,有很多其他配置项);找到 ./vim/bundle/vim-go/ftplugin/go.vim 文件,打开在文件首部添加:"缩进为4set shiftwidth=4set softtabstop=4"Tab键的宽度set tabstop=4"set autoindentset ...
2018-09-27 17:31:42
1396
转载 检测Lua脚本中死循环及解决方法
检测Lua脚本中死循环及解决方法是本文要介绍的内容,一般LUA在测试的时候,往往会因为什么原因导致死循环,那么本文将会解决这个问题,来看内容。Lua是一门小巧精致的语言,特别适用于嵌入其它的程序为它们提供脚本支持。不过脚本通常是用户编写的,很有可能出现死循环,虽说这是用户的问题,但却会造成我们的宿主程序死掉。所以检测用户脚本中的死循环并中止这段脚本的运行就显得非常重要了。可是,一个现...
2018-08-30 17:02:50
7657
转载 使用lua语言做高并发限流
https://blog.youkuaiyun.com/shecanwin/article/details/51719746 lua语言介绍 Lua[1] 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Ce...
2018-08-29 20:39:07
1605
转载 vim安装go插件vim-go和gocode,支持代码高亮、代码提示和语法检查等功能
https://blog.youkuaiyun.com/zhang197093/article/details/78559903?locationNum=5&fps=1
2018-08-25 16:18:12
7021
转载 性能分析
http://www.brendangregg.com/linuxperf.htmlhttp://www.brendangregg.com/perf.html图形化分析https://blog.youkuaiyun.com/oujiangping/article/details/78454881?locationNum=4&fps=1
2018-08-24 11:34:48
190
转载 gcov、lcov与genhtml 使用心得
gcc是linux平台下的C、C++ 编译器gcov是配合gcc产生覆盖信息报告的工具;lcov是将gcov产生的报告信息,以更直观的方式显示出来工具基本的使用方法分为4个阶段:(一)、gcc编译:产生插装后的目标文件test、gcov结点文件 test.gcno #gcc -fprofile-arcs -ftest-coverage -o test test.c ...
2018-08-17 14:59:32
1542
转载 dmesg coredump排查
https://www.cnblogs.com/zengkefu/p/5539294.html [root@localhost log]# cat -n /root/xx.c 1 2 3 #include <stdio.h> 4 5 void func(char *p) 6 { 7 *p = 'p'; ...
2018-07-04 15:04:20
1031
转载 找回pop掉的内容
git stash pop,不同于git stash apply, 会应用且pop出最近的一次stash,stash list不再会有之前的stash。git stash pop出的change是可以找回的.每次git stash都会生成一个新的commit,只要知道commitID, 通过git stash apply commitID 就可以应用之前的stash,然后重新git stash, ...
2018-06-08 14:28:04
786
转载 Git代码行统计命令集
https://blog.youkuaiyun.com/dwarven/article/details/46550117统计某人的代码提交量,包括增加,删除:[plain] view plain copygit log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs ...
2018-05-15 20:56:53
306
转载 go实现lua解析器
https://www.jianshu.com/nb/4157501 https://www.jianshu.com/p/3ed643138bdd
2018-04-24 16:56:42
1455
转载 编译原理之词法分析、语法分析、语义分析
词法分析(Lexical analysis或Scanning)和词法分析程序(Lexical analyzer或Scanner) 词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用lex等工具自动生成。语法分析(Syntax ana...
2018-03-28 20:02:15
2958
转载 词法分析器的实现
开篇编译,简单的说,就是把源程序转换为可执行程序。从hello world 说程序运行机制 里面简单的说明了程序运行的过程,以及一个程序是如何一步步变成可执行文件的。在这个过程中,编译器做了很多重要的工作。对底层该兴趣的我,自然的,也就迫切想搞清楚编译的内部实现,也就是编译的原理。这篇文章主要说的是编译器前端,词法分析器的原理,最后会给出一个词法分析器的简单实现。 介绍 编译简单的说,就是把源程序...
2018-03-28 19:59:32
615
转载 词法分析器实现
点击打开链接词法分析器实现一、写在前面 编译原理是软件工程的一项基础的课程,是研究软件是什么,为什么可以运行,以及怎么运行的学科,编译系统的改进将会直接对其上层的应用程序的执行效率,执行原理产生深刻的影响。编译原理的目的是将源语言翻译成目标语言。与翻译的区别就是,编译将高级语言编译成低级语言。至于达到什么样的低级语言,在不同的系统中是不同的,对于不同的机器都要用相应的指令系统,编译的目的就是将编...
2018-03-28 18:06:13
10910
2
转载 nginx 代码风格和源码解析
https://www.kancloud.cn/kancloud/master-nginx-develop/51834
2018-03-07 13:34:11
473
转载 lua str table互转
有时会遇到需要将一个table保存起来或传递给另一个string中的时候,table的序列化和反序列化就起到作用了。 需要使用到一个辅助函数function ToStringEx(value) if type(value)=='table' then return TableToStr(value) elseif type(value)=='string' then...
2018-02-27 15:42:13
2552
转载 Lua代码风格
一、程序的版式 1.1 空行1.2 空格1.3 长行拆分1.4 使用缩进二、命名规则 2.1 共性规则2.2 文件命名2.3 类的命名2.4 变量命名2.5 常量,事件名的命名2.5 枚举三、文件组织 3.1 文件描述3.2 文件中变量的定义3.3 类变量的定义3.4 函数参数的定义3.5 函数的定义规则3.6 注释的使用三、分隔和缩进 3.1 使用空行
2018-01-31 20:56:05
373
原创 vim 编辑器的配置
https://blog.youkuaiyun.com/luzhenrong45/article/details/52464307
2018-01-14 10:40:03
328
转载 ngx映射到lua模块函数变量一览
ngx.arg[1] 脚本参数ngx.var['arg_a'] 取queryString的参数a #/nginx_var?a=hello,worldngx.say(...) 依次输出参数,带换行ngx.print(...) 格式化输出,不带换行ngx.var.name
2017-07-27 20:54:32
1469
转载 nginx模块开发实战
想要进行nginx模块开发,首先你需要比较熟悉C语言,其次你需要对HTTP协议有一定的了解。点击打开链接从配置开始Nginx主配置文件中主要包括六块:main,events,http,server,location,upstream 结构如下:?123456789
2017-07-20 14:29:52
691
lua实现语法树的解析器和执行器
2018-04-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人