自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (2)
  • 收藏
  • 关注

原创 mysql同步方式介绍

binlog日志就是执行的sql语句,包含插入修改删除,没有查询日志relaylog日志是指备机接收binlog执行的日志一:异步复制master库有两个线程一个用户线程复制处理客户端的请求记录binlog日志,一个dump线程负责拷贝binlog日志跟把日志同步给slave,这样就会造成主从延时不一致问题二:同步复制同步复制是在记录binlog后将日志发送给备机,所有备机执行完然后发送确认ack给主机,主机才返回给客户端,如果备机执行时间过长就会导致客户端等待比较久..

2020-12-27 19:47:00 692

原创 linux进程通信方式对比

管道:速度慢,容量有限(64kB,ulimit -a可以查询的pipe size 指的是一次性写入的大小限制),只有父子进程能通讯 半双工的(即数据只能在一个方向上流动)----(匿名管道)int pipe(int fd[2]); // 返回值:若成功返回0,失败返回-1当一个管道建立时,它会创建两个文件描述符:fd[0]为读而打开,fd[1]为写而打开要关闭管道只需将这两个文件描述符关闭即可。单个进程中的管道几乎没有任何用处。所以,通常调用 pipe 的进程接着调用 fork...

2020-12-14 00:14:56 166

原创 网络编程模型的演进之路

在没有IO多路复用的模型的情况下,为了支持高并发采取以下网络模型一:阻塞IO+多线程client连接服务器,服务器有一个线程阻塞的调用accept,accept接收到连接后,创建一个线程来读写读写,并且处理业务逻辑阻塞IO不能充分利用CPU,后面就出现了reactor模型二:reactor模型特点:1:非阻塞IO+IO多路复用(此处的IO多路复用采用的是epoll模型,关于为何选用epoll,可以看下以前的一篇文章https://blog.csdn.net/l1008610/

2020-12-13 00:26:56 160

原创 一个奇怪的现象,删除文件后,磁盘空间没有释放

当我在boot目录使用dd创建一个100M的文件后,boot的可用大小又375M变成了274M,但是当我rm -f test后,磁盘的可用大小哈市274M,磁盘空间没有得到释放,是不是很奇怪.这种在Linux是一种很常见的现象就是test文件的inode还被引用,只用当inode引用为0时才会被释放这个时候我们使用lsof命令查看一下删除的文件,inode还被引用信息就可以知道该文件被谁使用把a.out进程干掉,重新查看磁盘空间发现磁盘空间回来了在此我们可以总结一种方法:当磁..

2020-12-12 20:32:25 988

原创 从linux内存管理的角度分析内存池设计与享元模式

linux的强大之处就在于任何一个点都能被别人借鉴发扬光大,成为独树一帜的知识点今天来分析一下linux的内存管理方式,两种常见的内存分配释放方式一:伙伴系统介绍把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。假设要申请一个256个页框的块,先从256个页框的链表中查找空闲块,如果没有,

2020-12-12 20:02:34 118 1

原创 高性能服务的零拷贝技术

在一个Http或者ftp服务器中经常会遇到请求数据的场景,客户端发送请求后,服务器需要调用read将数据从磁盘拷贝到内核的页缓冲区,然后从页缓冲区拷贝到应用程序的缓冲区,读取后然后将读取到数据发送出去,发送时将应用程序缓冲区的数据拷贝到内核中socket缓冲区内,然后从socket缓冲区中将数据拷贝到网卡缓冲区中将数据发送出去。可以看到发送一个文件的数据需要经过四次的拷贝,对应一个高性能的服务器,这肯定是痛点,一个优化点,这个时候,零拷贝的概念就出来了。零拷贝的目的就是减少拷贝次数。下面介绍两种在lin..

2020-12-12 17:55:15 93

原创 IO多路复用之select,poll,epoll分析

一:selectint select (int maxfd + 1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval * timeout);参数解释:maxfd+1:表示添加的所有fd的最大值加1,此处的有个注意点,select的最大fd是1024,此处的最大值也就是1025,说明一下为何要传入maxfd这个参数,首先readset,writeset,exceptset这几个参数都没有传入长度,

2020-12-12 17:00:30 117

原创 分布式系统下面的ID唯一性做法

在做分布式系统时,会涉及到数据同步,每一条对接大概率都存在一个ID,这个时候在同步的时候必然要满足一个ID的唯一性,常规做法就是生成一个UUID一:常规uuid的生成做法一个64位的uuid,第一位是符号位,表示正负,2-7位取得是机器的mac地址,因为Mac地址也是唯一的,并且是6位,8-64位就是个自增ID,这样组成一个uuid这个时候uuid的生成就是mac<<57 | 自增ID其他的UUID都是该类型的变种,可能在里面其中几位加上时间戳,随机数,进程号什么的,现在比较

2020-12-11 23:54:23 141

原创 进程,线程,协程讲解

一:操作系统的内存模型程序运行先从内存中读取数据进入高速缓存区(当内存不够时,可能要先进行内存交换,先从磁盘中读取数据加入内存),进行运算,运算完,存入主存中。此处涉及到一个性能调优的知识点,进程绑核技术,也就是常说的多核编程,当一个进程绑定cpu时,该进程就会一直在该cpu上跑,就不会涉及CPU切换,还有一点是CPU分为L1,L2,L3,三级缓存,也就是上面说的高速缓存区,L1,L2是每个核心独享的,L3才是各个CPU共享的,这样程序在访问高速缓存区时,同一个CPU就能减少cache miss

2020-12-11 01:01:05 142

原创 同步与异步,阻塞与非阻塞两组概念的区别

同步与异步针对的两个组件同步:一个任务完成后才能执行下一个任务异步:提交任务马上返回,不等执行结果,返回的是提交结果,例外一个任务也可以马上提交阻塞与非阻塞针对的是函数的接口的状态阻塞:一个函数的调用阻塞是指要等待函数执行完,返回结果非阻塞:仅仅调用函数,不用等待函数执行完成后返回由上面可以看出阻塞与非阻塞是指一种函数的调用状态,同步与异步是组件直接的概念...

2020-12-09 22:47:17 93

原创 多层面剖析TCP跟UDP的差别

1:数据层:TCP是基于数据流,UDP是基于报文传输2:数据开销:tcp的包头部是20个字节,UDP的头是8个字节3:可靠性:tcp是可靠的,丢包后有重传,乱序后有重组,UDP仅仅是发送报文,不管序列与丢包4:发送速率:tcp的发送有慢启动,滑动窗口控制,发送前还得三次握手建立连接,udp可以直接发送,相对来说udp的发送速率会更高5:应用开发:TCP接收的包并不一定是完整的,需要处理毡包问题,UDP每个数据包都是完整的,不会进行分片重组6:安全性:tcp的握手可以被利用,典型的就是do

2020-12-09 21:28:41 91

原创 图解滑动窗口与拥塞控制

一:滑动窗口首先看下TCP的头部结构,里面有个窗口大小的选项,占位2个字节,说明滑动窗口最大的发送大小为65535(2^16 - 1)字节,也就是64K,当前也可以通过选项字段进行放大.tcp发包是通过对方设置的滑动窗口控制发包的速率,如上,1-4表示已经发送并确认的包,5-7表示已经发送,但是对方未确认的,8-11,表示准备发送的,12-15表示还未发送,滑动窗口的范围仅仅是5-11。例如:发送5-7的包,发送时,会将5-7的包拷贝一份放入重传缓冲区,开启定时器重传(此处的重传是个慢.

2020-12-09 21:15:54 321

原创 从soket函数角度看TCP三次握手

三次握手的过程很简单,首先客户端发送syn包给服务器,客户端处于syn_send状态,服务器收到syn包后给客户端回复一个ack包,服务器处于syn_recv状态,客户端收到ack后,给服务器发送一个ack包,客户端处于established状态,服务器收到ack后也将状态置为etablished状态。里面涉及到几个socket通信的函数调用所处的状态1:Listen处于客户端调用connect之前,服务器开启端口监听模式,此处的Listen还有一个考察点,就是int listen(int fd, ..

2020-12-09 00:14:50 133

原创 samba安装

目前大部分的服务器开发,都是在WIN上写代码,linux编译,大概是因为大家用惯了图形界面,而且Linux也没用比较好的代码管理工具吧,为了能让WIN与Linux进行通信,大部分的都是使用samba进行通信,今天就讲讲samba的安装,有些新手可能不知道怎么安装。Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messa

2020-12-07 23:17:22 263

原创 cocos定时器分析

注:COCOS分析的版本为3.4COCOS的定时器是通过一个哈希表进行保存的,每一帧循环的时候都会调用定时器的update方法,并传入两帧之间的时间间隔 /*void Scheduler::update(float dt)*/,在update方法中对哈希表进行轮询调用回调函数。在轮询调用中将定时器分为四种,其中三种是每一帧必定循环调用的方法,struct _listEntry *_upda

2020-12-07 23:17:04 895

原创 cocos2d-x中用的lua文件加密方式

主要分为两种加密方式:一:修改cocos引擎中的代码,修改解密函数Cocos2dxLuaLoader文件中的解密函数extern "C"{ int cocos2dx_lua_loader(lua_State *L) { static const std::string BYTECODE_FILE_EXT = ".luac";

2020-12-07 23:16:54 412

原创 lua源代码编译

Lua源码下载地址:lua官网(http://www.lua.org/ftp/)下载之后解压目录如下etc中的README有编译方式:从vs命令行编译工具进入解压目录,不是进入etc目录,不然会编译不过然后输入etc\luavs.bat,进行编译然后在src目录下会生成lua.exe,luac.exe,lua51.lib,lua51.dll几个文件编译完成了

2020-12-07 23:16:36 141

原创 tolua++编译

tolua++的源码可以从github上获取(https://github.com/LuaDist/toluapp)(目前的版本只支持5.0与5.1)win32的编译可以直接在解压目录中的win32中的vc7中打开将luaxlib.h,lua.h,luaconf.h,lualib.h放到include文件夹中,lua51.lib放在lib文件夹中进行编译,可能的修改一下Lib库的名字在

2020-12-07 23:16:19 818

原创 设计模式六大原则

l:开闭原则,对程序的扩展是开放的,修改关闭,即:可以对原来的程序接口进行继承扩展,但是不能修改原来的程序代码2:里氏代换原则,程序中基类能出现的地方,子类也能出现,即:能使用基类的地方,也一定适用于子类,并且程序的行为没有变化,子类可以扩展基类的功能,但不能修改基类的功能3:依赖倒转原则:针对接口编程,高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该

2020-12-07 23:15:59 144

原创 cocos2.0中的CCObject与cocos3.0中的Ref的比较

最近在学习Cocos的知识,将

2020-12-07 23:15:29 756

原创 创建型设计模式

设计模式分为总的来说分为三大类创建型模式:五种,工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式:七种,适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式行为模式:十一种,策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介模式、解释器模式首先介绍创建模式,创建模式主要是在创建对象

2020-12-07 23:15:10 110

原创 TCP数据传输

分析TCP的数据传输过程出现的错误就得先知道TCP传输的原理send ->SOCKET缓冲区->通过OSI顺序进行封包->网卡缓冲器->发送到网络中->网卡接受(目的地非目标主机则扔掉)->OSI解包->SOCKET缓冲区->recv书上说的TCP是可靠传输,若数据包在上面那个流程丢了,源主机没有在规定的时间收到目的主机的回复,就会按照重传时间进行重传,注意若网络环境不好的话肯定的丢包,你

2020-12-07 23:14:45 238

原创 C++类构造以及赋值

有很多同学搞不清类的构造顺序,到底是基类先构造还是子类先构造,什么左值,什么是右值,构造函数为什么不能是虚基类,虚构函数为什么的是虚基类,且听AIR老师为你们徐徐道来第一个基类与派生类的构造顺序class TestA{public:TestA(){ printf("construction TestA\n"); }~TestA(){ printf("destroy Test

2020-12-07 23:13:26 279

原创 浅谈Lua面向对象的实现

一:lua的类实现有时候有些lua对象(其实就是个table)并不是全局的,需要创建多个,这个时候就得模拟类的机制--------------------------------------------------------------------- 拷贝表数据-- @param b : 原始表-- @param a : 新表-----------------------

2020-12-07 23:11:33 143

原创 代码如何变成可执行文件

hello.c#include <stdio.h>int main(){ printf("Hello World\n"); return 0;}gcc hello.c 将会生成a.out在hello.c到a.out这个过程到底是经历了哪几个阶段,gcc帮我们做了什么,a.out是怎么生成hello.c ->a.out主要经历了四个阶段:预处理,编译,汇编,链接一:预处理预处理主要是处理源代码中以#开始的预编译指令...

2020-06-03 22:31:18 2584

原创 线程同步中方式对比

在多线程程序中,往往会遇到线程中资源同步问题,同步问题可以划分为两类,一类为共享一个资源,一类为给每个线程分配一个资源一:给每个线程分配一个资源1:定义线程变量,在变量名前面加上_thread,该变量就会申明为线程变量但是同时C++中对__thread变量的使用有额外的限制:1. 在C++中,如果要在定义一个thread-local变量的时候做初始化,初始化的值必须是一个常量表达式。2. __thread只能修饰POD类型,即不带自定义的构造、拷贝、赋值、析构的类型,不能...

2020-05-31 17:25:12 230

原创 程序执行顺序,为何先执行main,在Main退出之后可否执行别的函数呢

我们写各种程序时,都知道入口函数是main,为何是先执行Main呢,我们可不可以改变呢,让其先执行别的函数呢,怎么改变,执行完main之后,我们又能不能加点别的东西,继续执行呢,想知道的同学且听AIR老师为你们徐徐道来 在C程序执行时会调用C运行时库,里面有一个入口函数mainCRTStartup->__tmainCRTStartup,我们只要改变默认注册的运行函数就能达到自己的目的了通过

2016-12-31 09:55:38 478

原创 C++类型转换

C++类型转换类型转换分为两种,一种为显示转换,一种为隐式转换编译器自动帮我们转换的为隐式转换ps:隐式转换,编译器将double转换为Intdouble b = 3.123int a = b编译器自动将double类型的b:3.123转换为Int a:3ps:显示转换,手动将double转换为Intdouble b = 3.123int a = (in

2016-12-03 11:51:22 149

原创 C++类型转换

C++类型转换类型转换分为两种,一种为显示转换,一种为隐式转换编译器自动帮我们转换的为隐式转换ps:隐式转换,编译器将double转换为Intdouble b = 3.123int a = b编译器自动将double类型的b:3.123转换为Int a:3ps:显示转换,手动将double转换为Intdouble b = 3.123int a = (in

2016-12-03 11:50:34 61

原创 lua中dofile,loadfile,require的区别

在lua中dofile,loadfile,require都是加载文件函数,其中还是有一些异同点loadfile,加载文件,编译文件,并且返回一个函数,不运行dofile其实就是包装了Loadfile,根据loadfile的返回函数运行一遍require加载文件的时候,不用带目录,有lua自己的搜索加载目录的路径,并且会判断文件是否加载过,加载过则不加载,热更新就是通过require的原

2016-10-26 20:34:56 683

原创 gdb调试

调试GDB程序之前的安装gcc或者G++安装方式yum install gcc (gcc安装方式)yum install gcc-c++ (注意不是yum install g++)GDB调试方法有以下几种1,gdb ,在可执行文件目录下执行gdb,不然的加路径2,gdb ,core文件是服务器宕机之后生成的dump文件,可以定位问题3,gdb attach pi

2016-08-29 23:52:29 208

原创 关于同一条TCP链接数据包到达顺序的问题

以前作者也一直以为数据包先发的不一定先到,直到今天才意识这个问题的缺陷,数据包是不一定先发先到,但是对于TCP有一点特殊,若我们接受的数据包是在应用层,并且应用层用的是TCP的传输协议的话,这个顺序是保证,这个顺序的保证是在传输层保证的,举个例子:client发生数据A,B给server,使用的TCP传输,client发送毫无疑问是先发送A,然后发送B,但是有些搞网络的同学可能会有这个疑问,A

2016-08-13 09:38:28 2330 1

原创 Win 编译使用libevent

Libevent官网:http://libevent.org/源代码可自行去官网下载,libevent是一个开源的网络库编译源码库:首先的修改一些WIN的宏定义,根据自己的操作系统来修改下面三个文件(在文件开头加上即可)ibevent-2.0.22-stable\event_iocp.clibevent-2.0.22-stable\evthread_win32.c

2016-08-05 12:16:29 268

原创 关于cocos3.4 lua版本Listview出现白底绿屏问题

在win32中listview使用clipping属性的时候会出现白底绿屏,是由于clippingnode节点出问题,没有调用initGLContextAttrs,需要自己调用,在C++ class中找到SimulaterWin.cpp 中实例化Appdelegate的代码,在后面添加_app->initGLContextAttrs();我的是第234行Appdelegate重写initG

2016-04-14 10:44:19 239

vc游戏编程配套光盘代码

vc游戏编程配套光盘代码,爱好游戏编程的可以看下,里面的带在VC下完全可以执行

2013-12-23

vc中各种控件的使用

vc中各种控件的使用的代码以及程序,让你轻松掌握各种控件的使用

2013-12-23

空空如也

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

TA关注的人

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