自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

自娱自乐的代码人

GIT:https://github.com/zhuli 阿里文娱用户增长技术负责人,长期招聘Java、数据开发,欢迎私M!...

原创 Lua源码分析 - 实战篇 - 编写Lua的扩展库(20)
原力计划

Lua的扩展库编写有三种方式: 注册方式:在主体语言里面编写扩展函数,然后通过lua_register方式,注册到Lua全局注册表中 动态调用:编写独立的扩展函数文件,编译成.so动态库文件,然后在lua中动态调用 扩展库编写:按照Lua语言本身的扩展库设计方式进行编写 如果忘记了扩展库的实...

2020-04-10 19:44:22 299 0

原创 Lua源码分析 - 实战篇 - Lua的API使用(19)
原力计划

目录 实战篇 - Lua的安装和Makefile 实战篇 - Lua的API使用 实战篇 - C语言中实现动态调用Lua 实战篇 - Lua的安装和Makefile 前面18章,我们详细的介绍了整个Lua语言的架构和实现原理。 Lua是一门C语言编写的脚本语言,非常的轻巧,大部分情...

2020-04-10 17:23:14 193 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之Opcode执行(18)

目录 虚拟机篇 - 指令执行函数luaV_execute 虚拟机篇 - 一个变量赋值操作看实现 虚拟机篇 - 指令执行函数luaV_execute 在《Lua源码分析 - 主流程篇 - 函数调用栈的实现(08)》我们看到了整个Lua脚本语言的执行主流程。 Lua脚本主流程:通过文件解析-...

2020-04-09 16:41:46 201 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之Opcode生成(17)
原力计划

上一篇我们讲解了语义的解析编译过程。我们基本知道了Lua的代码是一遍解析文件,一遍编译成字节码指令的。这一节,我们主要讲一下lcode.c文件,Opcode是如何生成的。 虚拟机篇 - 指令集存储数据结构Proto 上一篇,我们有讲到Proto是主要用来存储指令集的。 指令集存放:解析完毕的...

2020-04-02 17:57:26 237 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之编译过程(16)

目录 虚拟机篇 - 编译过程的核心数据结构 虚拟机篇 - 指令集存储结构Instruction 上一章节,讲解了语法的解析功能luaX_next,这一章节主要讲解虚拟机代码编译成操作码的过程。 虚拟机篇 - 编译过程的核心数据结构 我们首先看下,Lua核心虚拟机实现的几个重要文件:lle...

2020-04-01 17:10:00 246 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之Token分割器(15)

上一篇,我们讲到了Lua脚本文件加载和读取的方式。其中luaX_next函数就是用来将Lua脚本字符串逐个切割出Token。 虚拟机篇 - 语义分割单位Token结构 Token定义:Lua会对脚本语言逐个切分出最小单位Token。例如lua保留字“if”的Token是TK_IF,字符串Tok...

2020-02-25 20:41:56 371 0

原创 Lua源码分析 - 虚拟机篇 - 语义解析之loadfile文件读取(14)

前几章主要讲解了Lua的主流程和Lua的扩展库实现机制。本章开始讲解Lua虚拟机部分的实现机制。 虚拟机 - 从Lua的例子入手 我们通过一个Lua的例子,来看一下Lua脚本的执行。 我们首先顶一个一个lua文件,test.lua,里面是一段协程的简单示例脚本。 -- 定义一个协程回调函...

2020-02-21 19:41:15 305 0

原创 Lua源码分析 - 扩展库篇 - 扩展库Open的实现(13)

上一章,我们讲解了如何将Require进来。本章节具体将一下注册扩展库的实现。 扩展库 - 注册扩展库的配置 注册一个扩展库,首先需要进行两个基础配置:loadedlibs数组配置 & 库名称和回调函数的配置(lualib.h) loadedlibs是一个二维数组。第一个参数为库名称...

2020-02-18 19:02:04 187 0

原创 Lua源码分析 - 扩展库篇 - 扩展库Require的实现(12)

我们前面几章节讲过,Lua的函数调用有三种类型:C语言闭包函数,C 扩展库API和Lua语言函数。这一章我们主要讲解一下Lua的扩展库Require的实现。

2020-02-15 23:31:57 228 6

原创 Lua源码分析 - 主流程篇 - 注册表的实现(11)

Lua通过实现全局的注册表,来管理全局变量、C API扩展库的加载等信息。 注册表主要通过Table的数据结构进行管理,所以注册表是一个多维数组的结构。本章我们主要讲解Lua的注册表的整体操作方式。 Lua注册表 - 实现机制 前面我们说过,Lua的注册表是通过Table的结构实现了一个多维...

2020-02-14 20:15:08 398 0

转载 转载和积累系列 - 微服务(Microservices)和服务网格(Service Mesh)

目录 微服务(Microservices) 服务网格(Service Mesh) 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热点。而以 Spring Cloud 为代表的传统侵入式开发框架,占...

2020-06-02 16:15:09 2 0

转载 转载和积累系列 - Faas,又一个未来?

目录 前言 一、什么是Faas 二、Kubernetes 与 FaaS 三、后记 前言 云计算时代出现了大量XaaS形式的概念,从IaaS、PaaS、SaaS到容器云引领的CaaS,再到火热的微服务架构,以及现在越来越多被谈起的Serverless和FaaS,我们正在经历?一个技术飞速...

2020-06-02 15:50:28 4 0

转载 转载与积累系列 - Docker 核心技术与实现原理

目录 Namespaces 进程 网络 Libnetwork 挂载点 Chroot CGroups UnionFS 存储驱动 AUFS 其他存储驱动 总结 提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不...

2020-06-01 18:09:38 16 0

转载 转载和积累系列 - 三种常见的限流算法

介绍 一般做接口限流主要是为了应对突发流量,避免突发流量拖垮服务。如下面一些场景就有可能发生突发流量 微博热搜 恶意刷单 恶意爬虫 促销活动 接口限流的算法有如下几种 计数器算法 这是最容易理解和实现的算法,假设一个接口1s中最多请求100次。最开始设...

2020-05-15 11:57:43 61 0

原创 业务知识 - 人群圈层汇总

小镇青年 定义 三线、四线及以下城市的90后群体 人群 移动互联网人群渗透:2.12亿 场景 社交、网络K歌、游戏、短视频和照相图片 渗透率高 喜欢类型 小镇青年更喜欢直接、放松的视频类、游戏类等Kill...

2020-05-06 16:05:13 461 2

原创 业务知识 - 互联网产品研究

1. 哔哩哔哩 B站 MAU 1.2亿,次留40% 关键词 二次元、御宅族、弹幕、直播、游戏、视频搬运者、UGC、ACG 核心功能 ACG:(动画、漫画、游戏)、直播、影视 用户核心抓手 弹幕互动(参与感、认同感、归属感) ...

2020-05-06 11:13:49 218 0

原创 Lua源码分析 - 主流程篇 - 协程的实现(10)

协程:协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。 Lua语言没有独立的线程,所以每次执行Lua脚本的时候,都是单线程执行。同一个执行过程中,Lua没有实现线程,但是实现了协程。 相比线程,线程相对资源独立,有自己的上下文,由系统切换调用 协程也相对独立,有自己...

2020-02-13 16:31:17 476 0

原创 Lua源码分析 - 主流程篇 - 异常处理机制实现(09)

异常处理机制 -setjmp和longjmp 在讲解Lua的异常处理机制的时候,我们首先要看一下C语言的setjmp和longjmp的实现机制。 setjmp和longjmp分别承担非局部标号和goto作用。整体的逻辑如下: 使用setjmp,保存一个当前环境到jmp_buf跳转点,默认返回...

2020-02-12 18:43:17 297 0

原创 Lua源码分析 - 主流程篇 - 函数调用栈的实现(08)

前面几章我们介绍了Lua常用的最重要的几个数据结构。这章节开始,我们开始讲解主流程篇。 主流程,一般都是从lua.c的main方法开始。那我们就从main方法开始看整个链路和流程。 调用栈操作 - pmain方法的调用总流程 从main方法中,创建完基础的lua_State *L结构后,我们...

2020-02-10 19:35:19 415 0

原创 Lua源码分析 - 数据结构篇 - Mem内存操作(07)

原先以为Lua的内存操作也是高大上的,但是仔细研究了一下,突然发现,这块代码绕来绕去,封装来封装去,有一些low low感。 废话少说,直接上原理吧。这部分的代码,我也不画详细的图了。 Mem内存操作 - 核心分配函数 Lua的全局状态机里面,有两行代码,定义了内存分配的基础函数。底层的内存...

2020-02-02 16:01:54 427 0

原创 Lua源码分析 - 数据结构篇 - Table实现(06)

Lua语言中,Table结构类型是比较强大的一个存在。和PHP的数组有些类似。比较万能和强大。 Lua语言中Table的具体实现,主要在ltable.c文件中。 Lua语言的Table有两个特性: 1. Table使用关联数组,可以用任意类型来作为数组的索引键值 2. Table没有固定大...

2020-02-01 16:32:13 437 0

原创 Lua源码分析 - 数据结构篇 - 字符串池实现(05)

前面两章我们讲解了Lua的整个栈操作。本篇文章开始,我们重点阅读一下Lua的几个重要数据结构:字符串、内存操作、对象操作等。 字符串操作对应的文件:lstring.c 字符串 - 数据结构 Lua的字符串管理都会统一挂载到global_State全局状态机上。 字符串都会存储在TStrin...

2020-01-31 17:45:37 418 0

原创 Lua源码分析 - 栈结构篇 - 栈操作函数的实现(04)

上一章节讲解了Lua的栈结构,理解了上一篇的栈接口在看本片应该比较好理解。 Lua常用的栈操作API主要在lapi.c(lapi.c也提供给外部使用)文件中。 Lua栈操作 - 垃圾回收值处理 Lua针对需要垃圾回收的元素,在压入栈时,都会在Lua(也就是Lua虚拟机中)生成一个副本。 总...

2019-07-26 10:58:11 627 0

原创 Lua源码分析 - 栈结构篇 - 数据栈和调用栈(03)

Lua栈结构 - 栈存储方式 Lua栈结构主要是lua_State结构上。Lua的栈结构主要由两部分组成:数据栈和调用栈 数据栈:主要由一个StkId结构的数组组成。所有的数据都通过lapi.c文件中的lua_push*函数向栈上压入不同类型的值(数字、字符串、函数等)。L->stack...

2019-07-25 17:14:18 1086 0

原创 Lua源码分析 - 基础篇 - 全局状态机的实现(02)

从main函数看整个状态机的初始化 Lua的main函数方法中,lua_State *L = luaL_newstate(); ,主要用于创建全局状态机。 luaL_newstate主要用来为每一个LUA线程创建独立的函数栈和线程栈,以及线程执行过程中需要用到的内存管理、字符串管理、gc等信息...

2019-03-11 15:06:51 2720 5

原创 Lua源码分析 - 基础篇 - Lua源码的结构和架构图(01)

很久很久没有写博客了,一直忙于工作和项目,最近依然想静下来阅读一些好的源码。自从读完了Nginx和Memcache的源码后,对服务器端的基础开源软件的实现原理有了一定的认识,接下来想看看Lua这门精巧的语言是如何实现的。 开启Lua源码阅读之旅 Lua是一门用C语言编写的脚本语言,一共1w多行...

2018-11-26 17:43:41 5691 1

转载 转载和积累系列 - 分析服务器日志常用命令

1、查看有多少个IP访问:awk '{print $1}' log_file|sort|uniq|wc -l2、查看某一个页面被访问的次数:grep "/index.php" log_file | wc -l3、查看每一个IP访问了多少个页面:awk �...

2017-06-12 12:55:38 1102 0

原创 Nginx源码分析 - 实战篇 - 编写一个阶段化的模块(25)

HTTP模块篇,我们讲过Nginx的HTTP阶段处理 《Nginx源码分析 - HTTP模块篇 - ngx_http_core_run_phases函数和HTTP模块的阶段处理PHASE handler》我们代码在《Nginx源码分析 - 实战篇 - 编写一个自定义的模块》的基础上,将定义一个回调...

2017-06-08 13:19:07 3479 2

原创 Nginx源码分析 - 实战篇 - 编写一个自定义的模块(24)

Nginx源码分析 - 实战篇 - 编写一个自定义的模块

2017-06-08 12:03:28 3808 1

原创 Nginx源码分析 - HTTP模块篇 - HTTP模块的阶段处理PHASE handler(23)

上一章我们讲解了HTTP request的解析过程。我们基本知道了Nginx是如何解析HTTP的行和头。这一章我们主要讲解Nginx的阶段处理(PHASE 状态机实现)。阶段处理的概念如何理解,我举个例子:一个HTTP请求过来,除了解析HTTP的行和头外,还需要解析URI的rewrite、接受HT...

2017-06-07 14:49:26 3688 0

原创 Java深入 - jdk8特性

1. 接口提供默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可public interface Test { int get(); /* JAVA8 接口默认方法*/ default int getVal(int ...

2017-04-27 14:03:42 1203 0

原创 Nginx源码分析 - HTTP模块篇 - HTTP Request解析过程(22)

这一章主要讲解read事件的核心处理函数:ngx_http_wait_request_handler和ngx_http_process_request_linengx_http_init_connection 初始化客户端连接从上一章知道,ngx_event_accept第一次建立连接的时候,会调...

2017-01-05 20:59:43 4444 0

原创 Nginx源码分析 - HTTP模块篇 - TCP连接建立过程(21)

上一章,我们讲解了HTTP模块是如何初始化的。这一章节,主要讲解监听套接字初始化函数ngx_http_optimize_servers和Nginx整个连接的过程监听套接字初始化函数ngx_http_optimize_serversngx_http_optimize_servers主要处理Nginx...

2016-12-18 19:11:42 3599 0

原创 Nginx源码分析 - HTTP模块篇 - HTTP模块的初始化(20)

前面几章整理了Nginx的事件模块,这一章开始整理HTTP模块。HTTP模块的初始化工作,都在src/http/nginx_http.c 中的ngx_http_block函数中进行的。http模块的配置在看nginx_http_block之前,我们还必须看一下nginx.conf中 HTTP大模块...

2016-12-17 10:14:52 3589 0

原创 Nginx源码分析 - Event事件篇 - Epoll事件模块(19)

这一篇主要讲解一下epoll事件模型。Nginx支持多种事件模型:epoll/pool/select/kqueue等。epoll比较常用,我们也比较熟悉。Nginx的epoll事件模块在/event/module/ngx_epoll_module.c

2016-11-03 19:30:33 4559 0

原创 Nginx源码分析 - Event事件篇 - Event模块的进程初始化(18)

前面一篇我们讲解了《Nginx源码分析 - Event事件篇 - Event模块和配置的初始化 》 ,了解了整个Event模块分为:ngx_events_module 事件模块 、ngx_event_core_module 事件核心模块 和 epoll/queue/win32_select事件模型...

2016-09-15 17:59:02 4037 0

原创 Nginx源码分析 - Event事件篇 - Event模块和配置的初始化(16)

Event的模块和配置的初始化,必须得结合我们讲过的两篇文章:《Nginx源码分析 - 主流程篇 - 模块的初始化》 和 《Nginx源码分析 - 主流程篇 - 解析配置文件》 前面我们讲解了模块的初始化以及核心模块的配置文件的解析。而Event的配置解析会比核心模块解析会复杂一些,但是原理是一样...

2016-09-04 20:04:31 4484 0

转载 推荐算法和机器学习系列 - 协同过滤推荐算法和余弦相似性算法

编者按】推荐系统在各种系统中广泛使用,推荐算法则是其中最核心的技术点,InfoQ接下来将会策划系列文章来为读者深入介绍。推荐算法综述分文五个部分,本文作为第一篇,将会简要介绍推荐系统算法的主要种类。其中包括算法的简要描述、典型的输入、不同的细分类型以及其优点和缺点。在第二和第三篇中,我们将会详细介...

2016-08-30 14:21:08 8094 1

转载 推荐算法和机器学习系列 - 推荐算法综述

【编者按】推荐系统在各种系统中广泛使用,推荐算法则是其中最核心的技术点,InfoQ接下来将会策划系列文章来为读者深入介绍。推荐算法综述分文五个部分,本文作为第一篇,将会简要介绍推荐系统算法的主要种类。其中包括算法的简要描述、典型的输入、不同的细分类型以及其优点和缺点。在第二和第三篇中,我们将会详细...

2016-08-30 14:14:04 1772 0

原创 Nginx源码分析 - Event事件篇 - Nginx的Event事件模块概览(17)

前一章,我们讲解了《Nginx源码分析 - 主流程篇 - 多进程的惊群和进程负载均衡处理 》 中实际上已经涉及到了一部分事件模块的概念。细心的可以发现,Nginx的事件都是由nginx_event.c文件中的ngx_process_events_and_timers进程事件分发器这个函数开始的。这...

2016-08-22 19:30:35 6601 0

提示
确定要删除当前文章?
取消 删除