自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(197)
  • 收藏
  • 关注

原创 对Lua的理解

首先是Lua本身,打开5.1的lua版本开始编译后最后生成一个lua的可执行文件,这其实就是一个包含了Lua虚拟机的终端.。所以其实在不管redis也好nginx也好,也是在其中生产了一个Lua环境(虚拟机),然后将nginx里面/redis里面的一些函数暴漏出去,到达在Lua里面操作宿主环境的效果。在宿主中创建完Lua的State后,我们的目的是为了操作宿主里面的东西,所以需要将宿主里面的功能注入到State里面去以便Lua操作。但如何理解Lua以及Lua与宿主环境的交互是需要掌握的。

2023-08-21 10:01:03 164

原创 linux相关操作

注意,一般情况下user+sys会比real小或者相等,但是也有部分情况会远大于real,这是因为,这个程序可能被好几个进程在运行,而且如果是多核场景,这些进程如果被分配到了多个cpu上并发运行,那么这些cpu时间加上就很可能会大于real时间了。其中real表示的是 程序从开始到运行退出话费的时间, user+sys是程序(注意不是进程,是程序)在cpu上的时间,其中user表示用户态sys表示内核态(比如系统调用)。所以可以看出,在一个核上跑所有进程,实时展示的就是分片运行的。

2023-05-07 21:37:29 905

原创 rust学习

cargo build (编译成二进制) cargo build --release (优化编译,在最终交付/benchmark时可以加该选项)$cargo check (只尝试编译但不真正编译,减少浪费在编译上的开发时间)$cargo run (编译后运行)

2022-09-25 17:17:36 888

原创 nginx开发相关笔记

nginx开发笔记

2022-09-11 01:22:07 1041

原创 http2发帧过程与流控详解

nginx http2流程

2022-07-17 17:42:34 1151

原创 nginx 自旋锁 & 共享内存&多进程通信相关笔记

自旋锁1 自旋锁是不会让进程睡眠的,如果获取不到,会一直忙等(占用cpu)【理想情况下会一直忙等】,所以他适用于 在一些关键场景必须获锁的场景但又持锁事件非常短的场景。nginx的自旋锁实现void ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int value, ngx_uint_t spin) { ngx_uint_t i,n; //若无法获取所,则会一直在里面循环 ...

2022-03-20 21:54:13 3148

原创 http/2 hpack笔记记录

1 是否加入动态表索引中,都是由发出的一方向另一方进行告知的,即通过标记,告诉对方是否将这个头部索引放入动态表中。 【如果加入动态表了,下次会很快就索引到,之需要一个字节】2 对于h2优化中,推荐不要分拆域名、不要合并资源,尽量用一个域名,一条连接,这里的原因其实也有涉及到头部这块的:如果在一个连接上,动态累积添加的头部越多,压缩的效果也会越来越好。* 对于浏览器 在下列情况会默认使用同一条连接:同一个域名下的资源 or 不是同一个域名但是解析道同一个ip且是同一个证书。这样更能充分发挥h2优...

2021-10-08 21:52:34 82

原创 http/2相关读书笔记

《HTTP/2基础教程》1 web发生的变化:最早只有几千字节,包含资源只有个位数,主要是基于文本的网页,到如今发展为平均资源大小2MB、包含资源平均140个的富媒体网站。 然而用来传输web的http协议这些年一直没有发生多大变化,于是出现了新的工种:web性能专家h2诞生的原因也是基于 为了更好适应今天的复杂页面,同时有不牺牲速度和性能2 有几本前端性能优化的书籍:《高性能网站建设指南》3 在spdy之前,人们普遍认为在商业应用中没有必要对http/1.1做出突破性的、不兼容的.

2021-10-07 22:56:10 128

原创 nginx陈旧事件(stale)的再理解

之前了解过nginx中有陈旧事件,也知道是通过instance的标记位来区分陈旧事件,但一直没从根本上理解整个过程的运行以及nginx如何解决。这次读了一些资料和源码,对陈旧事件有了本质的理解。先说为何在nginx中会有陈旧事件?1 nginx通过epoll_wait返回了一组事件,比如返回了 #3 #5 #7 #9 #11 这些fd上都有事件触发,此时先处理#3,在处理3的过程中,如果发生了将 #9关闭的情况,此时如果nginx再去处理#9,就等于是一个不正确的操作。这里再多说一句,n

2021-10-01 16:45:32 334

原创 web性能权威指南-读书笔记

一 基础概念1 做重要的性能优化就是速度,而速度主要在两个方面有决定影响:延迟与带宽延迟:包括传播延迟【距离/信号传输速度,一般为光速的某个比例】+传输时延【数据量/链路带宽】+处理延迟【比如路由器等处理排队的时间】一般来说主要的延迟为传播延迟。延迟:2 数据体现:为了尽可能减少时延,铺设了专线横跨大西洋5000km的海底光缆,只是为了减少5ms的延迟,耗资4亿多美元,延迟是多么的重要。3 实际延迟:从纽约到悉尼的rtt大约在200ms-300ms,这还是在光缆上传输。人的感觉会..

2021-09-22 11:23:44 223

原创 计算机网络-自顶向下方法 读书笔记

运输层一 为何有些应用依然适用udp而不是可靠的tcp*1 udp没有拥塞控制,而tcp的可靠传输/拥塞控制会不停重试/等待 确认数据发送成功,对于一些延迟容忍度低的应用比如电话会议音视频会议不可接受,另外如果需要处于重压状态下依然能够正常运行,这时候会选择udp而不是受拥塞控制的tcp【难以实现】2 udp不用握手建立链接 ,而tcp需要三次握手在大多数场景下加剧了延迟。如dns运行在udp上就是因为udp没有握手引入的延迟。而web/http建立在tcp上因为他需要非常可靠至关重要。3

2021-09-20 13:42:56 278

原创 关于limit_req和limit_conn的区别

1,首先,limit_req和limit_conn两个模块都是为了来限流的,但是两者不在一个层面,为了搞清楚这个,必须先要弄清楚request和connection的区别,因为在很多情况下,我们把他们混淆了。so, what is the difference  between connection and request? 2, connection是连接,即常说的tcp

2015-11-21 21:51:01 9987 1

原创 关于sort排序通用的函数接口

#ifndef _SORT_H_INCLUDE_#define _SORT_H_INCLUDE_#include #include #include #include voidngx_sort(void*base,size_t n,size_t size,int(*cmp)(const void*,const void*));voidngx_print(void*base,

2015-04-18 16:12:19 833

原创 一个小型的web server (500行)

#ifndef _MY_UTILS_H_INCLUDE_#define _MY_UTILS_H_INCLUDE_#include #include #include #include #include #include #include #include #include #include #include #include #include #include

2015-04-18 15:28:39 749

原创 epoll更新实例

#ifndef _MY_ARRAY_H_INCLUDE_#define _MY_ARRAY_H_INCLUDE_typedef struct my_array_s my_array_t;struct my_array_s { void *elts; u_int nelts; size_t size; u_int nalloc;};my_arr

2015-04-17 17:34:09 485

转载 python2.7源码安装

1、下载可从 http://www.python.org/进行下载wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz22、解压tar jxvf Python-2.7.2.tar.bz23.进入目录安装:./configure --prefix=/usr/local/Python2.7 --ena

2015-01-30 11:06:12 1324

转载 剖析Nginx的过滤模块功能

4.1.剖析头部过滤函数头部过滤函数由下面三个基础部分组成:1. 决定是否操纵这个回复2. 操纵这个回复3. 调用下一个过滤函数举个例子,这里有一个简单版本的“没有修改过的”头部过滤函数。如果客户端的If-Modfied-Since头部与回复的Last-Modified头部匹配,就把状态设为 304 Not Modified。头部过滤函数只有一个参数ngx_http_reque

2015-01-12 16:10:00 1687

转载 Nginx http 一些小知识点

Nginx http 模块开发笔记http://blog.sunyixing.com/archives/226一、自定义http contextnginx http context即模块的自定义上下文环境,与loc_conf之类的conf结构的区别在于,conf结构的生存周期是整个nginx进程,初始化于启动阶段,其内存空间在整个进程中有效,而contex结构的生存周期则同是单

2014-12-26 10:35:37 1772

转载 关于ngx的一些常用函数和结构体

http://cjhust.blog.163.com/blog/static/17582715720124544047608/1,数据结构体         ngx_conf_t                  ngx_http_conf_ctx_t          ngx_http_module_t        ngx_comma

2014-12-17 10:28:53 1538

转载 关于ngx中的socket初始化以及打开

http://www.cnblogs.com/fll369/archive/2012/11/29/2795128.html1.  一些相关的数据结构://     监听端口配置信息,addrs是在该端口上所有监听地址的数组。typedef struct { ngx_int_t family; in_port_t

2014-12-11 15:46:27 2003

转载 nginx启动配置加载性能分析(一)-作为http服务器

转载:http://my.oschina.net/chenzhuo/blog/184892 nginx启动配置加载性能分析(一)-作为http服务器发表于12个月前(2013-12-16 16:59)   阅读(2696) | 评论(13)158人收藏此文章,我要收藏赞25开源中国 Team 团队协作平台正式开放 —— http://team.oschina

2014-12-11 09:44:20 1361

转载 ngx的数据结构理解

转载:http://code.google.com/p/nginxsrp/wiki/NginxCodeReview#%E7%A0%94%E7%A9%B6%E6%96%87%E6%A1%A3My favorites▼ | Sign in nginxsrpNginx Staged Reverse Proxy

2014-12-10 11:06:29 1131

原创 ngx事件驱动机制

事件驱动机制nginx中事件驱动机制涉及到的模块很清晰,在linux中为ngx_event_module、ngx_event_core_module、 ngx_epoll_module三个模块。其中ngx_event_module负责解析event{}中的配置,并且调度其它两个模块。ngx_event_core_module负责调度epoll模块(use配置字段)epoll模

2014-12-05 16:12:34 666

转载 nginx整体结构

http://blog.csdn.net/benbendy1984/article/details/6003779       零零碎碎的看了nginx的源码,自己感觉还是比较的乱,所以花点时间把它的整体结构给理下,           一   模块的结构(ngx_module_t)      [cpp] view

2014-12-04 14:39:36 573

原创 ngx的初步源码分析1

typedef struct ngx_list_part_s ngx_list_part_t;struct ngx_list_part_s { void *elts; ngx_unit_t nelts; ngx_list_part_t *next;};typedef struct { ngx_list_part_t *last; ngx_list_

2014-12-04 09:43:22 678

转载 图解Nginx 中的4级指针

源址:  http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27767798&id=3840094nginx的所有配置结构体全部放在一个cycle的四级指针中,本文就具体分析一下每级指针究竟指向的是什么,下图表示了这个四级指针每一级的指向,图中虚拟地址模拟了真实地址,ctx指针存的指向虚拟地址为1的数据,图中只列举出core,e

2014-12-03 11:17:56 3012

转载 ngx_init_cycle的详细分析

本文档的Copyleft归L.L所有,使用GPL发布,可以自由转载,转载时请务必以超链接形式标明文章原始出处,严禁用于任何商业用途。email: [email protected]来源: http://blog.csdn.net/ccdd14  继续分析ngx_init_cycle函数,该函数以init_cycle作为实参,而ngx_cycle是指向它的。ngx_init_c

2014-12-02 16:26:23 789

转载 HTTP请求报文和HTTP响应报文

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。HTTP请求报文一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。or<request-line><headers><blank line

2014-11-29 14:35:11 422

转载 epoll的使用例子

// local.h#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BUF_S

2014-11-26 09:40:28 678

转载 NginxCodeReview

My favorites▼ | Sign in nginxsrpNginx Staged Reverse Proxy Project HomeWiki Issues Source Search for Ngi

2014-11-24 11:16:45 853

转载 Why is volatile needed in c?

Volatile tells the compiler not to optimize anything that has to do with the volatile variable.There is only one reason to use it: When you interface with hardware. Let's say you have a little p

2014-11-20 11:20:12 672

转载 字符串常量及其存放位置

常量存储总结局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区1、局部变量存储在栈中2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区3、new申请的内存是在堆中4、字符串常量也是存储在静态存储区补充说明:1、栈中的变量内存会随着定义所在区间的结束自动释放;而对于堆,需要手动free,否则它就一直存在,直到程序结束;2、对于静态

2014-11-14 16:43:18 3198

转载 c语言关键字--static

static作用(修饰函数、局部变量、全局变量)在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char

2014-11-04 16:15:05 548

原创 c语言编译汇编过程

先写一个程序:/*game.c*/ #include #include #include #define II 199#define LL 2000typedef struct{ int a; float b;}double_data;int main(){ printf("Hello world\n"); printf("II is %d

2014-11-04 09:15:47 5518

转载 pcap.h

/* * Copyright (c) 1993, 1994, 1995, 1996, 1997 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modif

2014-10-30 11:38:18 2844 2

转载 typedef void (*funcptr)(void) 什么意思

定义一个函数指针类型。比如你有三个函数:void hello(void) { printf("你好!"); }void bye(void) { printf("再见!"); }void ok(void) { printf("好的!"); }typdef void (*funcptr)(void);这样就构造了一个通用的函数你用的时候可以这样:void speak(int id)

2014-10-27 12:30:57 649

转载 struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系

在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:typedef unsigned short sa_family_t;struct sockaddr {        sa_family_t     sa_family;    /* address family, AF_xxx       */

2014-10-27 09:52:52 586

原创 流量分析篇(粗糙)

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

2014-10-24 20:47:08 529

原创 UDP回射

#include #include #include #include #include #include #include #define SERV_PORT 33901#define BUFFSIZE 1024void dg_echo(int sockfd,struct sockaddr*pcliaddr,socklen_t clilen);int main(int

2014-10-21 13:47:36 488

转载 Linux内核分析 - 网络[二]:网卡驱动接收报文

分类: 内核协议栈 2011-03-30 11:34 5902人阅读 评论(2)收藏 举报 linux内核网络structdescriptorheader纠结了好多天,终于弄懂了B440X的处理。上篇讲到通过中断,最终网卡调用了b44_rx()来接收报文 对这个函数中的一些参数,可以这样理解:bp->rx_cons –处理器处理到的缓冲区号bp->r

2014-10-19 17:04:34 79

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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