架构
Gitter_
null :)
展开
-
twemproxy源码解析1 源码文件总体简介
src/nc.c文件 是程序入口main函数所在,下面我给各个函数加了注释intmain(int argc, char **argv){ rstatus_t status; //rstatus_t 返回类型 struct instance nci;//nc实例 nc_set_default_options(&nci); //为nc实例设置一些默认的参数属性值...原创 2019-03-27 18:49:29 · 494 阅读 · 1 评论 -
twemproxy源码解析2 部分数据结构定义
在nc_mbuf.h里struct mbuf { uint32_t magic; /* mbuf magic (const) 这个值不是很理解是什么意思,一般是0xdeadbeef*/ STAILQ_ENTRY(mbuf) next; /* next mbuf 下一块mbuf,代码里所有的mbuf几乎都是以单向链表的形式存储的*/ uint8...原创 2019-03-27 18:55:18 · 193 阅读 · 0 评论 -
twemproxy源码解析-前言:特性简介
下面是twemproxy的特性 后面根据这些特性做一些讲解:1.Fast,即快速,据测试,直连twenproxy和直连redis相比几乎没有性能损失,这已经很逆天了,最重要的是他还没有进行读写分离就能达到这样的效果,确实fast2.Lightweight,即轻量级,就我个人而言,它代码量就是轻量级的,解压后仅仅1.8MB!!!因为透明连接池,内存零拷贝以及epoll模型的使用,使得它足够快速...原创 2019-03-28 14:29:33 · 377 阅读 · 0 评论 -
linux内核相关-c字符数组底层处理
C语言中字符串结束符’\0’本质‘\0’就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写。’\0’就是 字符串结束标志。'\0’是转义字符,意思是告诉编译器,这不是字符0,而是空字符。空字符\0对应的二进制为00000000,而数字0为00110000原来,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以’\0’作为串的结束符。因此...原创 2019-04-08 11:31:30 · 402 阅读 · 0 评论 -
read()
read函数在用户空间是由read系统调用实现的,由编译器编译成软中断int 0x80来进入内核空间,然后在中端门上进入函数sys_read,从而进入内核空间执行read操作。sys_read函数定义在fs/read_write.c文件,定义如下asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t cou...原创 2019-04-08 11:33:03 · 381 阅读 · 0 评论 -
内核-strcpy
看libc里面实现的strcpy说明一下,这个libc代码的来源貌似比较复杂,有来自BSD的,有来自GNU,还有一些其他的#define UNALIGNED(x,y) (((unsigned long)x & (sizeof (unsigned long)-1)) ^ ((unsigned long)y & (sizeof (unsigned long)-1)))#defin...原创 2019-04-08 11:34:20 · 527 阅读 · 0 评论 -
twemproxy-内存管理机制
官方对内存管理方面介绍如下:在twemproxy中,请求进入和响应输出的所有内存都在mbuf中进行分配。mbuf启用零拷贝,因为客户端接收请求使用到的内存结构,后端服务器可以复用。同样,从服务器端接收响应时使用的mbuf,也可在客户端复用。此外,使用重用池管理mbuf的内存。这就是说:一旦分配了mbuf,它就不会被释放,而只是重新进入重用池。默认情况下,每个mbuf块的大小设置为16K。在mb...原创 2019-04-08 11:38:32 · 700 阅读 · 0 评论