自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 icmp应答包如何定位ping进程

icmp应答包如何定位ping进程今天一个朋友说他自己实现一个ping程序。要过他的代码看了一看。通常的ping程序都是通过icmp协议实现,但是icmp协议却不同于tcp与udp。tcp与udp协议首部包含着源端口号和目的端口号,所以当一个tcp或udp协议应答返回时,我们可以根据对应的端口号,定位到相应的处理进程。但是icmp的协议里面并不包含端口号,ping程序是如何定位到应答包属于自己发出的

2016-09-08 19:52:36 2492

原创 软渲染-双线性插值

双线性插值可以是纹理的边缘插值效果更好。这里有详细的说明,我就不赘述了。在代码过程中一定要特别注意由于浮点数取整所造成的误差。源码在此效果图1:无插值效果图2:双线性插值可以清楚的看到,纹理边缘被虚化。

2016-08-07 22:51:03 706 5

原创 软渲染-背面剔除

给软渲染增加背面剔除,简单的理解就是把看不到的面剔除掉,这样会节省很多无用的渲染。    问题就是如何判断出当前的面是否可见。这个比较好理解,当我们的视线看不到这个面的正面时,那就表示这个面不可见,如何判断这个面的正面能不能被看到呢?用几何形式来表达就是从眼睛发出的视线与这个面的法线的夹角是否大于90°,因为法线垂直于平面,与法线90°的夹角正好是于平面平行,如果大于90°就在平面下了,所以我

2016-08-04 13:59:01 1275

原创 软渲染

断断续续的看3d方面的知识已经近2年的时间,因为主战场是服务端,3d的东西总是缺缺补补,不过总体还算是系统。从开始的3d数学基础,龙书,紧接着不自量力的挑战了Real-time Rendering(3rd) ,这本图形学界的武林秘籍目录对当时的我来说还是过于专业难懂,看了不到一半,暂时搁置了,然后接触了优秀的客户端同事,在他的推荐下看到了 游戏程序员养成计划 这篇前辈留下来指导后生的3d程序员养成

2016-08-01 09:29:10 1479 1

原创 Unity Critter地图导出到服务器配置

一般情况下,从Critter导出的地图会与Unity自带的Navigation洪培出的地图会有比较大的差异。需要耐心调整Critter的参数才可以。下面是我调的参数,与Unity导出的地图基本相似。希望能帮到那些正在用Critter为服务器导出地图而发愁的同学。

2015-08-14 19:36:45 1540 1

原创 项目笔记-数据库进程宕机

简述情景:1. 最开始出现邮件报警,db进程内存超过5G。2. 1小时后,db宕机3. 检查日志,发现mysql语句执行很慢。从18:30开始出现日志警告。写了个程序测数据库执行速度。连本机数据库执行1000条语句,时间500ms左右。连其他机器数据库执行1000条语句,时间8s左右。服务器的数据库执行线程500ms执行一次,也就是说一旦一次的执行时间超过500ms,而且s

2015-02-06 16:49:16 698

原创 libevent学习八

Bufferevents高级应用本节讲述了Libevent的一些高级特性。配对bufferevents有些时候你可能需要一个可以自我沟通的程序。例:多数情况下,用户的程序会向对外连接去写入数据,有时候用户需要对它自己开放一个连接,并往这条连接内写数据。一种解决方案是通过启动一个端口只给本程序使用,但是这种方案是通过网络栈来实现自我交互,它是比较浪费资源的。第二种方案就是通过配对

2015-02-04 15:57:24 907

原创 libevent学习七

Bufferevents:概念和基础很多时候,一个程序需要处理一些数据的缓存,不止应用在答复event上。例如:当我们需要去写出数据,通常会这样做:1. faxu

2015-02-02 22:38:48 1108

原创 libevent学习六

eventsLibevent的基本操作单元是event。每个event都意味着一个条件集合,包括:1. 一个准备好读或写的文件描述符。2. 一个“将”准备好读或写的文件描述符(只有边缘模式下)3. 一个超时事件4. 一个信号事件5. 一个人为触发的事件Event有相似的生命周期。一旦你通过Libevent方法去设置了一个event,并把它与event_base相关联,那

2015-01-29 20:17:12 858

原创 libevent学习五

event loop事件循环一旦你向event_base注册了一些event,那你接下来希望Libevent等待事件的发生并且通知你。接口#define EVLOOP_ONCE 0x01#define EVLOOP_NONBLOCK 0x02#define EVLOOP_NO_EXIT_ON_EMPTY 0x04int event_b

2015-01-27 11:13:23 1673

原创 libevent学习四

构建event_base在你开始使用任何Libevent前,你需要先创建一个或多个event_base。每个event_base管理着一个event的集合,并可以检测出哪些event被激活了。如果event_base使用了锁,就可以在多线程中安全的访问它。但要注意它的主poll函数只能被单个线程运行。如果你想用多个线程运行IO迭代器,你需要为每个线程分配一个event_base。注:在以后

2015-01-22 23:00:39 1113 1

原创 libevent学习三

安装LibeventLibevent有一些贯穿于整个程序的全局设定。它们影响着整个库。你必须提前确定这些设定,否则可能会造成不一致的状态。Libevent的日志消息Libevent可以记录内部的错误和经过。当然编译时增加了日志支持,它也会记录调试信息。默认情况下,这些信息输出到标准错误。你可以使用自己的调试方法去重写它。#define EVENT_LOG_DEBUG 0#de

2015-01-20 23:12:33 843

原创 libevent学习二

Libevent库是用来开发高效,可移植的非阻塞IO。它的设计目标:1. 可移植性2. 高效性:Libevent试图使用每个平台上的最高效的非阻塞IO的实现3. 可扩展性:Libevent被设计成,即使程序需要去处理上万条活跃的socket也能运行良好。4. 方便性:不管在什么情况下,用最正常的方式去用libevent写一个程序,都可能稳定,可移植。Libevent库包

2015-01-20 20:38:46 1008

原创 libevent学习一

libevent:一个事件通知库。libevent的API提供了一个可以执行回调函数的机制。这些事件可以是一个文件描述符或到达指定时间。而且,libevent也支持由signals或常规的timeout产生的回调。

2015-01-19 23:14:42 1312

原创 网络库

最近想写一个网络库。想要实现的目标:1. 负责收发消息,不关心消息格式2. 动态添加监听端口3. 动态添加对外连接4. 关闭连接

2015-01-06 21:35:38 879 2

原创 Effective C++-读书笔记

注:本笔记只适用于本人,想怎么写就怎么写,想写多少就写多少,想略过就略过,完全随心所欲。条款07:多态基类声明virtual析构函数。C++明白指出,当derived class对象经由一个base class指针被删除,而该base class带着一个non-virtual析构函数,其结果未有定义-----实际执行时通常发生的是对象的derived成分没被销毁。(说说感想,这条规定是让我

2014-12-12 10:23:05 575

原创 存储过程

有这样的一个需求:获取当前时装已有时装id为5,6,7,8的玩家,并获取相应时装剩余的时间,剩余时间为0-1天的按1天时装道具价格补偿,剩余时间为1-3天的按3天时装道具价格补偿,剩余时间为3-7天的按7天时装道具价格补偿,剩余时间为7-30天的按30天时装道具价格补偿,超过30天按永久时装道具价格补偿·每一件时装单独邮件补偿补偿金额如下:1天价格:0.5两金子

2014-12-08 15:21:23 516

原创 C++对象模型-读书笔记

1. 简单对象模型:一个object是一系列的slots,每一个slot指向一个members。Members按其声明次序,各被指定一个slot。

2014-12-03 21:33:26 971

原创 UNIX网络编程:卷2-读书笔记

UNIX网络编程:卷2 - 读书笔记

2014-11-27 20:51:51 1698

原创 pthread_coroutine基于pthread的协程

使用Posix线程实现的coroutine协程的关键在于栈的保存沿用,有很多其他版本的C实现的coroutine,如:setcontex, setjmp/longjmp。我认为线程拥有自己的数据栈,天然提供栈的沿用,再利用pthread_mutex_t, pthread_cond_t来做异步唤醒,那pthread一定也可以实现coroutine。所以我就写了这个库。写的匆忙,质量不高,

2014-11-25 14:07:35 1012

原创 mq_open permission denied问题

在UNIX网络编程:卷2-进程间通信中的一个例子如下:#include #include #include #include #include #include #include "common.h"int main(int argc, char **argv) { int c, flags; mqd_t mqd; flags = O_RDWR | O_

2014-11-18 20:34:45 4564 1

原创 UNIX网络编程:卷1-读书笔记

Unix网络编程:卷1-socket套接字 读书笔记

2014-11-14 14:15:13 1548

原创 线程特定数据

在多线程程序里,我们有可能经常遇到因为函数使用的静态变量无法为不同的线程保存各自的值的问题。有很多办法可以解决,本文就来看一下通过线程特定数据来解决这样的问题。每个系统支持有限的线程特定数据元素。POSIX要求这个限制不小于128(每个进程)。系统为每个进程维护一个我们称之为key结构的结构数组,如图:key结构中的标志指示这个数据元素是否正在使用,所有的标志初始化为“不在使用”。当一个线

2014-11-14 13:31:16 1181

原创 __cxa_pure_virtual的情况

总结了一下网上关于__cxa_pure_virtual出现的

2014-11-13 17:52:10 8170

原创 Linux多线程服务器端编程:使用muduo C++网络库 读书笔记

1. 需要注意:scoped_ptr/shared_ptr/weak_ptrdou

2014-10-30 22:36:07 1615

原创 关于_ENV(lua5.2 or later)

问: 我调用了test模块中的del_env函数,但是main文件中的print并没有消失。-- test.lualocal test = {}function test.del_env () _ENV = nilendreturn test-- main.lualocal test = require "test"test.del_env()print "

2014-10-29 14:49:49 1096

原创 查看进程,线程业务执行情况

ps -Lf 23281 这个可以看出哪一个线程是最耗资源的pstack 23281 这个可以输出当前正在执行的线程代码栈信息 详细的自行去google吧

2014-10-22 20:58:13 546

原创 C++ primer 笔记

1. int month = 9, day = 7; // 这样是无错的2.

2014-10-22 15:25:17 665

原创 gdb调试,lua c api返回值

gdb时经常发生找不到源文件的情况,使用下面命令

2014-09-12 16:20:26 1646

原创 pthread_cancel引起的死锁

最近发现程序无法正常终止,

2014-09-11 15:30:44 1371

原创 关于std::map erase

Windows 下: std::map::iterator iterTmp = m_mapTmpFightState.begin(); for (; iterTmp != m_mapTmpFightState.end();) {#ifdef WINDOWS if (CDateTime::current() > iterTmp->second.m_nBeginTime + MIN(

2014-09-04 22:02:04 520

原创 pthread_cond_timedwait返回EINVAL

最近发现程序的business.wait(100); 使用起来造成cpu负载很高

2014-09-03 10:57:54 5258 1

原创 Skynet协同模型

yulualib/skynet.luaskynet中对协同程序的应用

2014-05-05 19:46:43 743

原创 Mysql 存储过程 不存在错误

DELIMITER //CREATE PROCEDURE demo_param2(IN p_in int)BEGIN select p_in; SET p_in = 2; select p_in;END;//DELIMITER ;call demo_param2(1);出现 ERROR 1305 错误时由于当前用户没用权限对用户进行

2014-04-28 21:29:46 4646

原创 Skynet网络模型

接口:// 创建epoll套接字 返回socket_server*上下文struct socket_server * socket_server_create();// 释放资源void socket_server_release(struct socket_server *);// IO循环int socket_server_poll(struct socket_server *,

2014-04-28 15:14:00 890

原创 fastdb分析

因为项目中使用的fastdb,前2天的面试也有所提到,就想着要仔细yanjiu

2014-04-24 12:29:39 1971

空空如也

空空如也

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

TA关注的人

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