自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(126)
  • 资源 (4)
  • 收藏
  • 关注

原创 Linux 内存管理

目录0.内存碎片1.Linux内存管理2.buddy伙伴算法3.malloc free4.slab总结参考文章0.内存碎片外部内存碎片,也就是产生了多个不连续的小物理内存,导致新的程序无法被装载;内部内存碎片,程序所有的内存都被装载到了物理内存,但是这个程序有部分的内存可能并不是很常使用,这也会导致内存的浪费;1.Linux内存管理内核空间申请内存:kmalloc/free->slab->buddy用户空间申请内存:malloc/free->brk ,sbrk, mm

2021-04-25 16:06:59 90

原创 6.mysql 索引

1. 索引类型1.1 联合索引多个字段组个成一个索引,使用时遵循最左原则。联合索引的查询???1.2单列索引1.2.1 普通索引可重复 空NULL1.2.2唯一索引不可重复 可有一个NULL1.2.3主键索引不可重复 不可NULL 没有定义自动选择一个索引作为主索引,没有符合条件的默认生成一个。1.2.4全文索引文本关键字查找2. mysql数据落地文件形式2.1MYISAMFrm:表的定义文件。MYD:数据文件,所有的数据保存在这个文件中。MYI:索引文件。2.2

2021-04-19 17:41:50 63

原创 5.redo undo

1.使用场景事务是持久性的,事务提交后先修改内存buffer,然后选择时机更新到磁盘。如果内存更新了,但是还没有来得及更新磁盘,就宕机了。那么怎么进行数据恢复??事务是一致性的,在执行过程中发生错误,数据怎么回滚??begin;UPDATE `t_user` SET `name`='更新1' WHERE (`id`='4'); # -->写入 undo logUPDATE `t_user` SET `name`='更新2' WHERE (`id`='4'); # -->写入

2021-04-19 17:41:05 61

原创 4.mysql mvcc

1.使用场景session1session2beginselect * from t_user where id==1 # select 100beginupdate t_user while id ==1 #update200commitselect * from t_user # select 100commit事务的默认隔离级别是RR(可重复读)。意思是session1的两次select 是一致的,就是说两次select

2021-04-19 17:33:42 103

原创 2.mysql 锁 并发控制

1.读写锁读锁(共享锁):并发读写锁(互斥锁):互斥写/读2.全局锁flush table with read local数据库中的所有表加锁,对于任何表的数据更新结构更新都将阻塞。用于数据库备份,3.表锁3.1显示加锁LOCK TABLES t_user READ/WRITE;UNLOCK TABLES ;lock tables t1 read, t2 write; 命令,则其连接写 t1、读写 t2 的语句都会被阻塞。同时,加锁连接在执行 unlock tables 之前,也只能执

2021-04-19 17:29:20 93

原创 1.mysql逻辑架构

一.基础架构1.连接层连接层负责接受连接、协议解析、授权验证。2.服务层mysql核心层,负责sql语句的解析、优化、查询缓存。所有的跨引擎功能在这里实现:存储过程、触发器、视图。3.存储引擎层数据的存储和读取。上层通过API与其交互,屏蔽了引擎差异。二.线程模型1.no thread模式所有连接在主线程处理,并发低。2.one connection per thread主线程接受连接,验证通过后,为连接分配一个工作线程。工作线程负责连接的sql语句分析、优化、执行。大量连接会导致

2021-04-19 17:27:38 142 1

原创 二叉搜索树 平衡二叉搜索树 红黑树 B树 B+树

1.二叉搜索树特点:父节点比左大 比右小 缺点:最差情况为链表2.平衡二叉搜索树(AVL)特点:二插搜索树的基础上 保证左右子树的高度差不大于13.红黑树(RBT)特点: 根黑 叶子黑 红的子是黑 路径中黑个数相同使用场景: 查找 排序(中序遍历有序)插入调整: 插入节点是红色更容易满足红黑树性质(路径黑相同) 当插入后,插入节点的父节点是红色(不满足红的子节点都是黑色),那么需要调整红黑树。4.AVL和RBT比较AVL是严格平衡二叉树,插入删除需要多次旋转调整。RBT是

2021-03-25 12:09:05 121

原创 zookeeper C lua客户端源码

github地址:https://github.com/dingqinghui/zookeeper-lua

2020-12-31 16:49:02 173

原创 zookeeper C 客户端

一.下载源码编译1.下载git地址:https://github.com/apache/zookeeper2.编译:在源码的根目录下执行 ant compile_jute会在/zookeeper-client/zookeeper-client-c 下生成 generated文件夹切换到/zookeeper-client/zookeeper-client-c目录执行 cmake cmake .3.生成文件位置库目录:/root/apache-zookeeper-3.5.8/zookeeper

2020-12-31 16:45:31 661

原创 zookeeper学习笔记

zookeeper一.简介1.概述用于分布式管理的工具,文件系统+通知机制2.特点1.集群可用一领导者,多跟随者。集群中半数以上的服务可用,则整个集群可用。2.强一致性,访问任意服务获取到的数据都是最新的。3.顺序性同一个客户端发送的消息,按照顺序处理。4.事务性客户端的请求要么成功要么失败3.数据结构数据结构模型与UNIX文件系统类似,每个节点为ZNODE,ZNODE默认可以存储1M数据,使用路径作为节点的唯一标识。二.安装配置1.单机安装配置1.下载直接下载个bin包

2020-11-20 15:28:20 85

原创 计算机网络五层模型详解

目录网络概述:1.网络通信的层次2.OSI七层网络模型3.TCP五层模型:一、物理层1.物理层作用2.物理层概述3.信号调制4.信道复用技术二、数据链路层1.数据链路层作用2.点对点数据链路层三个基本问题3.滑动窗口协议5.以太网三、网络层1.概述2.IP地址3.构成超网(无分类编码)4.IP协议5.ARP协议6.ICMP协议四、传输层1.概述2.UDP概述3.TCP详解4.TCP可靠性五、...

2020-06-02 17:25:25 43853 2

原创 skynet protobuf的使用

protobuf 的lua版本的安装编译和使用参考文章:https://blog.csdn.net/qq769651718/article/details/79435298protobuf的协议定义。---c2s.protosyntax = "proto2";package c2s; //定义包名message test { //定义消息结构required stri...

2019-12-18 17:49:13 1045

原创 信号

1.信号是怎么产生的?可以由内核,进程产生2.信号怎么发送到进程?2.1.发送进程->内核所有信号都需要通过内核发送,内核在收到信号后会对其参数进行检测(这个进程能不能发送这个信号…)。校验通过后,将信号数据(信号值,产生原因,发送者进程ID)拷贝到内核空间.然后再发送给对应的进程。2.2.内核到->接受进程早期UNIX版本,进程保存了一份未处理信号的位图。当内核发送信号到进程时,先检测进程是否对该信号未处理,时则丢弃当前信号。这样的信号称为不可靠信号。不可靠信号每次执行完都会恢复默

2021-05-06 15:56:03 145

原创 进程虚拟地址空间

1.PCB内存管理结构:PCB对内存的管理结构,页表指针 + List<段信息>。一次内存的分配其实就是分配逻辑地址更改段信息,逻辑地址的合法性也是通过这个结构检测的。2.页表结构 radix tree:物理地址需要和虚拟地址建立映射管理,假设映射关系为 物理地址 = f(虚拟地址)。那么页表就是函数f()。 页表使用radix tree结构。3.页表项结构:4.内存查找过程:计算机指令使用的是虚拟地址,虚拟地址是连续的更容易管理使用。物理内存存储在页表中计算机中的一块硬件

2021-05-06 15:53:15 177

原创 进程

1.进程模型—状态机状态 = 内存 + 寄存器动作 = 指令/中断状态1—动作1–>状态22.进程管理fork :状态机的拷贝execve:可执行文件(ELF)装入内存,更新状态机的代码段数据段更改IP寄存器指向ELF的main函数exit:状态机的销毁3.进程调度硬件产生时钟中断操作系统收到中断,保存当前运行环境到内存(线程/进程的堆栈)。调度算法选择一个进程/线程恢复运行环境(运行环境就是寄存器的值)。3.1调度策略轮询优先级调度Linux complete fai

2021-05-06 15:52:02 158

原创 函数调用栈

void swap(int * a, int *b){ int c; c = *a; *a = *b; *b = c;}int main(){ int a, b; a = 16; b = 32; swap(&a, &b); return (a - b);}.text _swap: pushl %ebp # 保存原ebp值,设置当前函数的帧指针。 movl %esp,%ebp subl $4,%esp # 为局部变量c在栈内分配

2021-05-06 15:51:27 182

原创 并发锁

1.互斥锁sleep waiting 获取锁失败 由内核调度进入休眠态。等待内核的通知,重新唤醒执行。由于进入了睡眠态,导致操作系统进行了线程的切换(有一定的开销 要保存线程的运行环境等)特定:获取锁失败 会陷入睡眠 适用于互斥代码执行时间较长1.1pthread_mutex_lockpthread_mutex_lock(&mxlock);++val;pthread_mutex_unlock(&mxlock);1.2pthread_mutex_trylock好处就是不用阻塞

2021-05-06 15:50:33 182

原创 并发

1.基础知识1.1编译器和硬件对程序的优化1.1.1指令重排序int i = 0; //语句1 bool flag = false; //语句2 i = 1; //语句3 flag = true; //语句4优化后可能变成 13241.1.2指令合并int i = 0; //语句1 i = 1; //语句2 i = true;

2021-05-06 15:49:58 94

原创 中断 系统调用

操作系统启动bios:负责硬件初始化以及检测,加载磁盘中0柱0面1的bootloader到内存,转交CPU执行bootloader代码。bootloader:加载操作OS到内存,执行OS代码。中断 系统调用中断异常系统调用源头外部硬件内核被动产生主动触发处理时机异步同步同步/异步响应打断执行 对用户透明(感知不到)杀死/重新执行等待完成继续执行OOT-1620287319707)]...

2021-05-06 15:49:09 82

原创 8.sql 执行顺序

sql执行顺序(1)from(3) join(2) on(4) where(5)group by(开始使用select中的别名,后面的语句中都可以使用)(6) avg,sum…(7)having(8) select(9) distinct(10) order by先对FROM子句中的两个表执行一个笛卡尔乘,此时生成虚拟表 virtual table 1(选择相对小的表做基础表)然后是应用ON条件筛选器,将ON中的逻辑表达式将应用到 virtual table 1中的各个行,筛选出满

2021-04-19 17:43:01 86

原创 7.mysql join union

1.SQL JOIN2.SQL UNION 操作符UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。SQL UNION 语法SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2**注释:**默认地,UNION 操作符选

2021-04-19 17:42:27 70

原创 3.mysql 事务

1.事务特性原子性:要么全部成功 要么全部失败一致性:一个状态到另一个状态不存在中间状态。就是说执行过程中崩溃,已经修改的数据不会保存。持久性:commit后永久有效隔离性:事务间相互隔离,不受其他事务影响,内部状态对其他事务的是不可见的。2.事务隔离级别:read uncommit:读取到未提交的数据read commit:多次读取相同行数据不一致repeatable read:多次读取有新行serializable:串行读取,加锁,并发低。脏数据:读取到为提交的数据不可重复读:多次

2021-04-19 17:31:32 58

原创 信号产生到触发过程

1.信号是怎么产生的?可以由内核,进程产生2.信号怎么发送到进程?2.1.发送进程->内核所有信号都需要通过内核发送,内核在收到信号后会对其参数进行检测(这个进程能不能发送这个信号…)。校验通过后,将信号数据(信号值,产生原因,发送者进程ID)拷贝到内核空间.然后再发送给对应的进程。2.2.内核到->接受进程早期UNIX版本,进程保存了一份未处理信号的位图。当内核发送信号到进程时,先检测进程是否对该信号未处理,时则丢弃当前信号。这样的信号称为不可靠信号。不可靠信号每次执行完都会恢复默

2021-03-25 16:02:19 426

原创 Redis 基础 集群 工具

redis目录redis1.1 string1.2 list1.3 set1.4 注意2.启动基础配置2.1 启动2.1.1单机启动2.1.2 集群启动2.2配置3.持久化3.1 rdb3.1.1触发条件3.1.2优点3.1.3缺点3.2 aof3.2.1 aof文件写入策略3.2.1 配置3.2.3 aof文件重写4.事务4.1 语法4.2 注意5.主从复制5.1.概述5.2作用5.3 原理流程5.3.1 建立连接5.3.2 初始数据同步5.3.3 命令同步5.3.4 心跳机制5.3.5 runid,复

2021-01-12 11:40:59 238

转载 Linux-内核缓存区和write行为

Linux-内核缓存区和write行为原文地址:https://www.cnblogs.com/JohnABC/p/5821660.html《Unix环境高级编程》应用缓冲技术能很明显的提高系统效率。内核与外围设备的数据交换,内核与用户空间的数据交换都是比较费时的,使用缓冲区就是为了优化这些费时的操作。其实核心到用户空间的操作本身是不buffer的,是由I/O库用buffer来优化了这个操作。比如read本来从内核读取数据时是比较费时的,所以一次取出一块,以避免多次陷入内核。 内核缓...

2020-11-10 18:33:22 424

转载 C 语言 define 变参__VA_ARGS__使用

C 语言 define 变参__VA_ARGS__使用在C语言的标准库中,printf、scanf、sscanf、sprintf、sscanf这些标准库的输入输出函数,参数都是可变的。在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用可变参数的宏是一个不错的选择。在C99中规定宏也可以像函数一样带可变的参数,如:#define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__) 其中,...表示可变参数列表,_

2020-11-10 18:31:14 251

原创 malloc引出的问题

A文件:void *zmalloc(size_t size) { void* ptr = malloc(size+PREFIX_SIZE); return ptr;}B文件:void* ptr = zmalloc(1024);问题:使用ptr时导致堆栈错误。在zmalloc打印地址是48位(实际是64位打印时去除了高位的0),B文件中的ptr打印却是32位原因:在B文件中未包含A的头文件。而C99之前未声明函数默认返回值类型为int类型。所以指针从64位转为32位....

2020-11-02 15:31:12 105

原创 Redis主从复制

目录一、简介.二、原理流程1.建立连接。2.初始数据同步1)全量复制2)增量复制3)注意事项3.命令同步4.runid,复制缓冲区,offset5.心跳机制 三、问题1.频繁全量复制2.数据不同步一、简介.1.一主多从,每台从服务器保存一份数据。主写,从读。主向从进行数据同步。解决的问题:1.单点故障数据丢失2.读写分流,分摊压力二、原理流程1.建立连接。slave主动与master建立连接,slave保存...

2020-10-09 16:55:43 122

转载 linux 时间同步

https://www.cnblogs.com/suiyueshentou/p/7798340.html

2020-09-30 11:27:24 56

原创 Ip归属地查询

Ip地址信息获取https://ip-api.com/。可返回json xml csv格式。不可用于商用,单个IP每小时只能请求45次。获取Ip所有信息http://ip-api.com/json/{"status":"success","country":"China","countryCode":"CN","region":"SC","regionName":"Sichuan","city":"Chengdu","zip":"","lat":30.6667,"lon":104.066.

2020-09-23 16:31:18 256

转载 【Networkk】一篇文章完全搞清楚 scoket read/write 返回码、阻塞与非阻塞、异常处理 等让你头疼已久的问题

https://www.cnblogs.com/junneyang/p/6126635.html

2020-08-14 20:00:17 105

转载 网络游戏登录流程

https://www.jianshu.com/p/992cd9d954e7

2020-08-13 09:32:24 546

转载 大型手游登录流程详解

https://blog.csdn.net/xufeng0991/article/details/48138625

2020-05-27 11:54:50 382

原创 redis 学习笔记 数据类型 集群配置 数据持久化

思维导图:https://www.processon.com/view/link/5e73239ee4b03b9965240e6a#mapREDIS 五中数据类型的底层实现https://www.cnblogs.com/MouseDong/p/11134039.htmlhttps://www.jianshu.com/p/fe2b4b9387b9REDIS集群配置讲解https://...

2020-04-20 17:23:04 202

原创 skynet snlua分析

snlua 是所有lua服务的载体,负责加载lua脚本以及绑定lua消息回调。所有的lua服务其实都可以统称为snlua服务。由之前的module文章可知,skynet启动一个C 服务,会自动调用C服务的create 和init函数。下面看看snlua的create和init分别做了什么。snlua_create:创建lua虚拟机,创建snlua实例。//service_snlua....

2019-12-20 16:58:41 637

原创 skynet 学习资料整理

https://blog.csdn.net/zxm342698145/article/details/79640535 整篇覆盖很全https://www.cnblogs.com/watercoldyi/p/5804743.html 模块https://blog.csdn.net/linshuhe1/article/details/70495328 S...

2019-12-20 11:29:04 187

原创 skynet 线程

启动创建一个socket、timer、monitor线程和n个工作线程。工作线程的个数由启动时配置的参数决定。static voidstart(int thread) { pthread_t pid[thread+3]; struct monitor *m = skynet_malloc(sizeof(*m)); memset(m, 0, sizeof(*m))...

2019-12-20 11:21:57 509

原创 skynet push消息到次级消息队列

压入消息:intskynet_context_push(uint32_t handle, struct skynet_message *message) { //获取服务cx struct skynet_context * ctx = skynet_handle_grab(handle); if (ctx == NULL) { return -1;...

2019-12-20 10:18:26 163

原创 skynet skynet_context、message_queue、handle_storage、global_queue

创建一个module实例,只是创建了一个服务的私有数据,以及绑定了callback,接受消息后的逻辑处理函数。那么这个module实例是怎么被底层框架所驱动呢???先看个数据结构skynet_context:// skynet_server.cstruct skynet_context { void * instance; // 由指定module...

2019-12-19 18:11:51 296

原创 skynet module分析

module初始化skynet中每个C服务都是一个module。源码位于skynet_module.c在启动时设置module的默认查找路径为"./cservice/?.so",创建modules实例。skynet_main.cintmain(int argc, char *argv[]) { .... config.module_path = optstring("...

2019-12-19 14:56:58 212

VisualAssist.X_10.9.2333_lhdown.rar

VisualAssist.X_10.9.2333_lhdown.rar 破解版 亲测可用

2019-09-12

skynet-master.rar

skynet 源码 已编译好skynet 源码 已编译好

2019-07-11

Lua代码性能分析 Lua代码性能分析

Lua代码性能分析 Lua代码性能分析

2018-11-23

MySQL API 中文手册 v5.1官方中文版

亲测可以使用,下载后如果不能正常显示,选择文件 点击属性 点击“解除锁定” 然后点应用即可 摘要:这是关于5.1版至5.1.2-alpha版MySQL数据库系统的参考手册。该手册不适用于旧版本MySQL软件,这是因为在MySQL 5.1和以前的版本存在很多功能性差异和其他差异。如果正在使用MySQL软件的较旧版本,请参阅MySQL 5.0参考手册,该手册涵盖了MySQL 5.0,或参阅MySQL 4.1参考手册,该手册涵盖了MySQL 4.1以及MySQL的所有早期版本。在手册的文本中,通过引用发布版本号(5.1.x),注明了MySQL 5.1的二级版本。

2018-06-12

空空如也

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

TA关注的人

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