自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(258)
  • 资源 (7)
  • 收藏
  • 关注

转载 网络编程:Reactor与Proactor的概念

1、标准定义两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理

2015-12-24 01:04:19 637

原创 redis时间处理的bug

redis 3.0int aeProcessEvents(aeEventLoop *eventLoop, int flags)中以最小时间阻塞在         // 处理文件事件,阻塞时间由 tvp 决定 numevents = aeApiPoll(eventLoop, tvp);但是aeCreateTimeEvent中在添加时间事件的时候并没有做任何的处理如

2015-11-29 00:00:02 1158

转载 四叉树优化碰撞检测

游戏中碰撞检测分为两个阶段:broad phase 和 narrow phase。接下来要介绍的就是broad phase。在broad phase这个阶段,我们的主要任务是将屏幕上的物体进行筛选,筛选出最可能发生碰撞的物体集合。试想想,屏幕上有N个物体,如果我们对每两个物体都进行碰撞检测,那时间复杂度就有N^2。但实际上,在游戏画面中,并不是每两个物体都需要进行碰撞检测,比如一个在屏幕右

2015-05-26 00:32:15 14762 13

转载 GFlags 使用详解

GFlags - 老牌的PageHeap配置工具,有命令行和GUI两种操作方式,功能比较全,包含在Windbg调试器安装包内。同样在Windows 2000 Professional SP2 以上可用。一些使用GFlags命令行的例子:配置正常页堆:"C:/Program Files/Debugging Tools for Windows (x86)/gflags.

2015-03-21 19:51:04 6591

转载 骨骼蒙皮动画(Skinned Mesh)的原理解析

骨骼蒙皮动画(Skinned Mesh)的原理解析(一)  一)3D模型动画基本原理和分类 3D模型动画的基本原理是让模型中各顶点的位置随时间变化。主要种类有Morph动画,关节动画和骨骼蒙皮动画(Skinned Mesh)。从动画数据的角度来说,三者一般都采用关键帧技术,即只给出关键帧的数据,其他帧的数据使用插值得到。但由于这三种技术的不同,关键帧的数据是

2015-03-09 00:13:06 1024

转载 2D动作游戏开发与实现(翻译)

原文太长,所以将翻译与原文分成了两部分, 主要是讲2D游戏瓦片规则及不规则渲染与角色碰撞原理的。因为单纯的2D游戏开发过于简单,所以本文尝试结合不同的2D平面游戏并将之归类,列出他们的优缺点,然后讨论下一些实施的细则。长远目标是在2D平面游戏开发方面的指导做的十分全面。如果有任何建议,更正,要求或者补充,请留言!声明:有些文章的信息是通过反编译引擎的,并不是通过代码或者编程者本

2015-02-24 14:05:23 1461

转载 C++实用技巧

复杂的东西写多了,如今写点简单的好了。由于功能上的需要,Vczh Library++3.0被我搞得很离谱。为了开发维护的遍历、减少粗心犯下的错误以及增强单元测试、回归测试和测试工具,因此记录下一些开发上的小技巧,以便抛砖引玉,造福他人。欢迎高手来喷,菜鸟膜拜。    之前的文章讲了指针和内存的一些问题,今天说一下单元测试的问题。如果在团队里面没有对单元测试的框架有要求的话,其实我们可以

2015-01-14 22:17:40 813

转载 高性能服务开发之定时器

在开发高性能服务器中,定时器总是不可或缺的。 常见的定时器实现三种,分别是:排序链表,最小堆,时间轮。 之前用的定时器是基于最小堆的,在定时器数量不多时可以使用, 目前公司用的框架中的定时器是基于简单时间轮的,但是为了支持大范围的时间,每个齿轮的所维护的链表为有序链表,每次插入时先mod出spoke,再从头遍历链表以便将定时器插入到合适位置, 所以本质上还是基于有序链表的。时间复杂度并未减少。

2014-12-30 11:01:53 690

转载 Lua源码剖析-GC

这次主要来分析lua的gc。首先lua中的数据类型包括下面9种,ni, Boolean, number, string, table,user data, thread , functions 以及 lightusedata.其中 string, table,thread , function 是会被垃圾回收管理的,其他的都是值存在。因此我们来看对应的GC数据结构.

2014-12-22 01:06:05 1093

转载 探索Lua5.2内部实现:Garbage Collection(2)

原文:http://blog.csdn.net/yuanlin2008/article/details/8684869GCObjectLua使用union GCObject来表示所有的垃圾回收对象:[cpp] view plaincopyprint?182 /* 183 ** Union of all collecta

2014-12-21 19:18:16 796

转载 探索Lua5.2内部实现:Garbage Collection(1)

Lua5.2采用垃圾回收机制对所有的lua对象(GCObject)进行管理。Lua虚拟机会定期运行GC,释放掉已经不再被被引用到的lua对象。基本算法基本的垃圾回收算法被称为"mark-and-sweep"算法。算法本身其实很简单。首先,系统管理着所有已经创建了的对象。每个对象都有对其他对象的引用。root集合代表着已知的系统级别的对象引用。我们从root集合出发,就可以访

2014-12-21 18:18:24 640

转载 协程coroutine资料更新

以前有一个 http://sunxiunan.com/?p=1949 这里加上一些新看到的内容,也许有重复。http://sdiehl.github.com/coroutine-tutorial/ coroutine-tutorialhttp://www.chiark.greenend.org.uk/~sgtatham/coroutines.htmlhttp://blog.

2014-12-21 00:36:23 1051

转载 Coroutines in C

by Simon TathamIntroductionStructuring a large program is always a difficult job. One of the particular problems that often comes up is this: if you have a piece of code producing data, and anothe

2014-12-20 21:26:24 883

转载 tolua++实现分析

tolua_register_gc

2014-11-09 20:09:36 641

转载 游戏中分层状态机的实现

状态机的实现方式有很多种,一般都使用比较简单的switch case方式来实现对事件的处理和状态的转移,如下所示:[html] view plaincopyvoid ProcessEvent(Event event)  {      switch(state)      {          case StateA:   

2014-10-25 01:21:51 2985

转载 Object Orientation Tutorial

Lua is not really an object-oriented language, and it doesn't have a built-in concept of classes. But it is easily possible to create your own class system using tables and metatables.Simple metat

2014-09-26 23:16:48 675

转载 windows下捕获dump

一般要捕获异常只需要两个函数:SetUnhandledExceptionFilter截获异常;MiniDumpWriteDump写dump文件。但是由于CRT函数可能会在内部调用SetUnhandledExceptionFilter(NULL),解除我们程序设置的异常处理,这导致我们的程序无法完整捕获崩溃。另外,还有一部分非异常的CRT错误,不属于SEH异常捕获的范畴,需要通过_set_inval

2014-08-10 19:48:18 810

转载 Lua 中实现面向对象

这里提供 Lua 中实现 OO 的一种方案:local _class={} function class(super) local class_type={} class_type.ctor=false class_type.super=super class_type.new=function(...) local obj={} do local cre

2014-07-31 03:17:40 794

原创 C++的Trace类需要注意的问题~

.Trace类跟踪项目函数的模块调用

2014-05-25 01:06:27 2004 1

转载 lua gc和weaktable

关键字:lua,c,gc,weaktable----------------------------------如果你对lus语言的中weak table不明白的话,那这篇文章应该对你有帮助。所有脚本语言几乎都有垃圾回收器(GC),当然lua也有。不明白GC不要紧,下面让我来解释:这一切要先从现代编程语言的鼻祖 — C语言开始。

2014-04-29 10:20:06 1381 1

原创 Tolua++技术文档

Tolua++技术文档1.简介Tolua++是一个编程语言文本转换工具,主要用来将C/C++文件转化成lua需要的接口形式。即把大量的函数转成static int XXX(lua_State* tolua_S)形式,以供注册到lua里面。Tolua++通过pkg文件来导出需要的类型,函数,对象。Tolua –o test.c tarray.pkgtarray.pkg里面是对应的

2014-04-28 23:33:57 13516

转载 splice系列系统调用

关注splice系列系统调用(包括splice,tee和vmsplice)已经有一段时间了,开始的时候并未能领会splice的意义所在,致使得出了“splice系列系统调用不怎么实用”的错误结论。随着内核研究的深入,才逐渐懂得:splice对于其中一个文件描述符必须是管道的要求并不是阻碍其应用的障碍,并且恰恰相反,它正是splice的本质所在。splice主要通过去除在内核空间和用户空间之

2014-04-06 21:38:48 2253

原创 引用技术接口的几个问题?

有个网络通信类,主要执行是在另外一个线程。但是在线程执行的时候,对象很可能已经析构了。所以接口设计为class PostCallBack:public base::RefCountedThreadSafe{public:virtual void ProcessData(string data,string flag)=0;virtual BrowserThread::I

2014-03-25 09:39:02 733

转载 Epoll在LT和ET模式下的读写方式

在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource temporarily unavailable总结:这个错误表示资源暂

2014-03-24 17:33:10 707

转载 浅谈 non-blocking I/O Multiplexing + poll/epoll 的正确使用

在前面的文章中曾经粗略讲过poll,那时是用阻塞IO实现,在发送和接收数据量都较小情况下和网络状况良好的情况下是基本没有问题的,read 不会只接收部分数据,write 也不会一直阻塞。但实际上poll IO复用经常是跟非阻塞IO一起使用的,想想如果现在内核接收缓冲区一点数据没有,read 阻塞了,或者内核发送缓冲区不够空间存放数据,write 阻塞了,那整个事件循环就会延迟响应,比如现在又有

2014-03-19 15:36:12 861

原创 收藏的好文章

1.并发锁方面http://www.cl.cam.ac.uk/research/srg/netos/papers/2007-cpwl.pdfhttp://www.drdobbs.com/parallel/choose-concurrency-friendly-data-structu/208801371?pgno=1http://www.drdobbs.com/parallel

2014-03-13 10:27:08 662

转载 syn flood 原理及防护

一、为什么Syn Flood会造成危害这要从操作系统的TCP/IP协议栈的实现说起。当开放了一个TCP端口后,该端口就处于Listening状态,不停地监视发到该端口的Syn报文,一旦接收到Client发来的Syn报文,就需要为该请求分配一个TCB(Transmission Control Block),通常一个TCB至少需要280个字节,在某些操作系统中TCB甚至需要1300个字节,并返回一

2014-02-23 21:09:33 1479

转载 为什么TCP连接需要三次握手分开需要四次握手?

TCP的三次握手和四次断开TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建立连接,数据传输和终止连接3个过程,TCP建立连接的过程称为三次握手,下面看一下三次握手的具本过程TCP三次握手过程1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事

2014-02-23 16:54:21 22405 1

转载 一个写优先的读写锁实现

/* g++ -Wall -o rwlock rwlock.cpp -lpthread** 一个写优先读写锁的实现,多线程频繁读,多线程少量写,同时写优先,性能极佳。* 当写锁(独占锁)lock成功的必要条件是:* 1. 将写锁计数++;* 2. 会阻塞后续对读锁(共享锁)的读;* 3. 等待读锁的计数为0;* 4. 等待写锁的计数为1;**/#includ

2014-02-23 16:28:55 1405

转载 Linux下的I/O

Linux的I/O机制经历了一下几个阶段的演进:(1)同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。(2)同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。(3)异步阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数

2014-02-21 16:50:18 762

转载 设计模式- 主动对象(Active Object)

译者注:1.    对象分为主动对象和被动对象,主动对象内部包含一个线程,可以自动完成动作或改变状态,而一般的被动对象只能通过被其他对象调用才有所作为。在多线程程序中,经常把一个线程封装到主动对象里面。2.    在翻译过程中,发现的原文不妥处被更正。3.    原文中许多内容一再重复,颇有蛇足之感,取精用宏,删繁就简。4.    尝试更高程度的意译。关键词这个文章

2014-02-18 19:06:12 1433 1

转载 CGI的一些知识点

CGI(Common Gateway Interface)是能让web服务器和CGI脚本共同处理客户的请求的协议。它的协议定义文档是http://www.ietf.org/rfc/rfc3875。其中Web服务器负责管理连接,数据传输,网络交互等。至于CGI脚本就负责管理具体的业务逻辑。Web服务器的功能是将客户端请求(HTTP Request)转换成CGI脚本请求,然后执行脚本,

2014-02-17 18:58:11 835

原创 网络编程中的reactor与proactor

首先,他们都解决了等待多个事件发生的问题,对多个事件源进行了多路分解。效率上面:reactor在缓冲区与内核的拷贝上面比proactor多了好几次,reactor在事件发生的时候是串行执行的,而proactor支持异步操作。引用别人的一个说法:reactor完成的时候只是告诉你有可读或者可写等消息,proactor已经帮你读到你要的缓冲区里面了。reactor比

2014-02-13 20:12:00 987

转载 使用异步过程调用(APC)实现模块注入

摘自:windows编程循序渐进             异步过程调用是一种能在特定线程环境中异步执行的系统机制。往线程APC队列添加APC,系统会产生一个软中断。在线程下一次被调度的时候,就会执行APC函数,APC有两种形式,由系统产生的APC称为内核模式APC,由应用程序产生的APC被称为用户模式APC。       每个线程都拥有自己的APC队列。应用程序可以使用函数把APC添加到指

2014-02-13 19:40:07 767

转载 Decorators详解

Python中的Decorators表面看起来很像C#的Attribute,其实不然,Python的Decorators和C#的Attribute完全是两个东西。Python的Decorators让我想到了设计模式中的装饰者模式(Decorator Pattern)。Decorator PatternAttach additional responsibilities to a

2014-01-30 12:43:30 1461

转载 Python *与** 参数问题

问题:     Python的函数定义中有两种特殊的情况,即出现*,**的形式。     如:def myfun1(username, *keys)或def myfun2(username, **keys)等。解释:  * 用来传递任意个无名字参数,这些参数会一个Tuple的形式访问。   **用来处理传递任意个有名字的参数,这些参数用dict来访问。*应用:

2014-01-29 12:45:08 1265

转载 Python yield 使用浅析

初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到底用来做什么,为什么要设计 yield ?本文将由浅入深地讲解 yield 的概念和用法,帮助读者体会 Python 里 yield 简单而强大的功能。5 评论:廖 雪峰, 软件工程师, HP2012

2014-01-29 12:33:25 649

转载 外观模式

动机(Motivate):    在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?意图(Intent):    为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 

2014-01-24 14:04:48 781

转载 黑板模式

黑板架构模式简介编辑黑板模式是一种常用的架构模式,应用中的多种不同数据处理逻辑相互影响和协同来完成数据分析处理。就好像多位不同的专家在同一黑板上交流思想,每个专家都可以获得别的专家写在黑板上的信息,同时也可以用自己的分析去更新黑板上的信息,从而影响其它专家。2黑板模式的应用场景编辑黑板模式的应用场景是要解决的任务可以分为多个子任务。解决方案如下图所示:3黑板模式的优

2014-01-17 10:25:32 1582

转载 数字证书原理

文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成数字证书。如果发现文中有错误的地方,或者有什么地方说得不够清楚,欢迎指出! 1、基础知识      这部分内容主要解释一些概念和术语,最好是先理

2013-12-25 10:50:38 691

计算机数学-刘新宇-递归

这个pdf里面主要是描述欧几里得算法,从而引申出递归,演算的意义。喜欢计算机数学的可以下载看看,内容简单易懂。

2020-02-27

计算机数学-刘新宇-自然数

计算机数学-刘新宇-自然数,学习计算机数学的资料。主要描述了自然数的一些历史以及公理,很有学习价值。

2020-02-27

fengeAtlas.py

laya拆图工具,不是一行行读取的,使用json来拆的。适用很多layabox打出的文件。依赖,python2.7 PIL

2019-06-21

游戏物理引擎开发源码

游戏物理引擎开发一书的源码,工程已经改为VS2013,里面的编译,链接错误都修改了.可正常编译

2015-05-17

动态Huffman编码

动态哈夫曼编码的PPT介绍,挺详细的,尤其是演示部分~

2013-08-29

binomial heap的算法描述

很清楚的描述了binomial heap 的插入,合并,删除~外国的

2013-08-07

空空如也

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

TA关注的人

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