06 2018 档案

摘要:聚集索引以及非聚集索引用的是B+树索引。 聚簇索引 单单从定义来看是不是显得有点抽象,打个比方,一个表就像是我们以前用的新华字典,聚集索引就像是拼音目录,而每个字存放的页码就是我们的数据物理地址。 非聚集索引 其实按照定义,除了聚集索引以外的索引都是非聚集索引,只是人们想细分一下非聚集索引,分成普通 阅读全文
posted @ 2018-06-28 10:03 _raindrop 编辑
摘要:一、缓存式的应用程序架构: 在应用层和db层之间加一层cache层,主要目的:减少数据库读取负担,提高数据读取速度。cache存取的媒介是内存,可以考虑采用分布式的cache层,这样更容易破除内存容量的限制,同时增加了灵活性。游戏多采用redis、Memcached这类。 二、实现MySQL数据库异 阅读全文
posted @ 2018-06-27 09:24 _raindrop 编辑
摘要:Redis是一个新兴的NoSql数据缓存组件,与memcache类似,但是功能却比memcache多一些。 首先,Redis和memcache都是基于内存的,所以读取和写入速度都非常快。但是memcache只支持简单的key-value数据的存储方式,而Redis对key-value ,hash,l 阅读全文
posted @ 2018-06-26 13:48 _raindrop 编辑
摘要:进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。 线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈、局部变量和指令指针。 线程和进程各自有什么区别和优劣呢? 进程是资源分 阅读全文
posted @ 2018-06-24 21:33 _raindrop 编辑
摘要:跳转查看 跳到文本的最后一行:按“G”,即“shift+g” 跳到第一行的第一个字符:先按两次“g” 阅读全文
posted @ 2018-06-23 16:19 _raindrop 编辑
摘要:使用数组代替switch分支语句降低圈复杂度 在服务器开发时,很多时间会采用数组代替switch分支语句,用来降低圈复杂度。 function registerCallbackFunc (code, func) if code== nil then return end if func == nil 阅读全文
posted @ 2018-06-22 09:28 _raindrop 编辑
摘要:Lua实现了一个安全的运行环境、一套自动内存管理机制、优秀的字符串处理能力和动态大小数据的处理功能。 我们都知道,只要应用程序加入lua解析器的功能,就能解析lua脚本。那lua脚本是怎样执行的? 我们通常用dofile去打开编译一个lua脚本。当应用程序调用dofile后,在执行完脚本后,才能后到 阅读全文
posted @ 2018-06-21 14:52 _raindrop 编辑
摘要:查看存储空间 先看看根目录下面 du -sh /* 下面这条命令就是显示所有隐藏文件和非隐藏文件的大小并根据占用空间排序的语句 du -sh .[!.]* * | sort -hr 看磁盘使用情况 df -h Linux中zip压缩和unzip解压缩命令详解 把/home目录下面的mydata目录压 阅读全文
posted @ 2018-06-21 13:49 _raindrop 编辑
摘要:skynet 是一个为网络游戏服务器设计的轻量框架,采用单进程,多线程架构。 底层是c,中间层和上层都是lua。基于actor模型,使用消息队列进行内部通信。 简单说,可以把 skynet 理解为一个简单的操作系统,它可以用来调度数千个 lua 虚拟机,让它们并行工作。每个 lua 虚拟机都可以接收 阅读全文
posted @ 2018-06-20 18:16 _raindrop 编辑
摘要:skynet跟mq扮演的角色类似,每个skynet进程维护了一个MQ,会dispatch msg到每个skynet_context的私有mq。有skynet就没必要再在自己项目里引入MQ了。 skynet 支持两种集群模式。 master/slave 模式(局域网) 当单台机器的处理能力达到极限后, 阅读全文
posted @ 2018-06-20 16:44 _raindrop 编辑
摘要:skynet有两种方法热更新lua代码,clearcache和inject,文章分别对这两种方法做说明。 clearcache热更新 讲这个前,先说明下skynet代码加载的事情。因为skynet的每个服务都是一个独立的lua虚拟机,对于同一份lua代码,N个服务就要加载lua文件N次,所以,sky 阅读全文
posted @ 2018-06-20 15:30 _raindrop 编辑
摘要:skynet 自带了一个控制台服务,可以很方便获取和调试 skynet 运行数据,而且可以热更新代码,所以,弄明白skynet控制台管理可以让你更好地使用skynet,甚至改进这个控制台服务,以满足不同业务需求。 这个服务默认不会启动,需要你手动启动它,如下: skynet.newservice(" 阅读全文
posted @ 2018-06-20 15:25 _raindrop 编辑
摘要:skynet中有http server和http client的代码,用来支持http访问。在分析http之前,要先看一下url库。文件位于skyet/lualib/http/url.lua。 skynet 从 v0.5.0 开始提供了简单的 http 服务器的支持。skynet.httpd 是一个 阅读全文
posted @ 2018-06-20 14:22 _raindrop 编辑
摘要:skynet启动流程 skynet程序只有skynet-src目录,./skynet ./example/config启动skynet_main.c读取配置文件,设置环境变量,调用skynet_start.c的skynet_start函数 skynet_start函数初始基础服务,调用_start函 阅读全文
posted @ 2018-06-20 14:18 _raindrop 编辑
摘要:之前已经说过skynet的是做什么的,现在开始从模块上研究skynet的源码。 skynet各层表现 从上大概就清楚skynet的“内部” 而skynet源码目录结构如下: 3rd:第三方代码,有lua和jemalloc等。 lualib:使用lua写的库 lualib-src:使用C写并封装给lu 阅读全文
posted @ 2018-06-20 14:12 _raindrop 编辑
摘要:消息队列mq 消息队列是skynet的核心功能之一,它的功能说白了就是入队出队,先进先出,这个数据结构都有讲过。源码实现在skynet_mq.h和skynet_mq.c中。 skynet的消息队列实际上是有两种,一种是全局消息队列,一种是服务消息队列。每个服务都有自己的消息队列,每个服务消息队列中都 阅读全文
posted @ 2018-06-20 14:08 _raindrop 编辑
摘要:skynet刚开始是单进程多线程的,它是由一个一个的服务组成的。在skynet上做开发,实际上就是在写服务。服务与服务之间通过消息队列进行通信。 做为核心功能,Skynet 仅解决一个问题: 把一个符合规范的 C 模块,从动态库(so 文件)中启动起来,绑定一个永不重复(即使模块退出)的数字 id 阅读全文
posted @ 2018-06-20 11:48 _raindrop 编辑
摘要:先看看io模型 先介绍两种高性能服务器模型Reactor、Proactor Reactor模型: 1 向事件分发器注册事件回调 2 事件发生 4 事件分发器调用之前注册的函数 4 在回调函数中读取数据,对数据进行后续处理 Reactor模型实例:libevent,Redis、ACE Proactor 阅读全文
posted @ 2018-06-20 11:11 _raindrop 编辑