这里汇总游戏开发相关的技术总结。

tech

汇总

 
  • 安全编程-c++野指针和内存泄漏

    尽管C++ 野指针和内存泄漏一直被诟病,但是在实时性很强的应用场合,c++ 仍然是不二之选。游戏服务器开发仍然使用c++ 作为主语言,但是大多结合动态脚本技术,一方面规避了野指针和内存泄露,一方面获得了开发效率和扩展性的红利。但脚本技术不是本文的讨论重点,事实上关于c++ 与 lua的技术文章我也一直在整理中,将会另文别述。今天主要说说在使用c++过程中,如何避免和解决野指针和内存泄漏问题。

  • 进程上下文切换 – 残酷的性能杀手

    对于服务器的优化,很多人都有自己的经验和见解,但就我观察,有两点常常会被人忽视 – 上下文切换 和 Cache Line同步 问题,人们往往都会习惯性地把视线集中在尽力减少内存拷贝,减少IO次数这样的问题上,不可否认它们一样重要,但一个高性能服务器需要更细致地去考察这些问题,这个问题我将分成两篇文章来写:

  • C++ 后台程序实时性能监控

    做后台程序经常会被问一句话,你的程序能撑多少人。一般官方一点的回答是这个得根据实际情况而定。 实际上后台程序的性能是可以被量化的。我们开发的每一个服务器程序, 对性能都非常有底,以为我们有数据。So,能撑多少人不少随便猜的,让数据报表来说话。

  • C++ 多线程编程总结

    在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。设计C++程序时,总结起来可以从如下几点提高效率

  • TCPDUMP 抓包

    写了个脚本, 用于调试服务器消息传输

  • 智能指针shared_ptr【无锁设计基于GCC】

    使用过Boost的话对shared_ptr一定有很深的印象。多个shared_ptr指向同一个对象,每个shared_ptr会使对象的引用计数加+1,当引用计数为0时, 对象将被析构

  • Base PyQt4, Simple Web APP Framwork

    Base PyQt4, Simple Web APP Framwork

  • linux时间相关结构体和函数整理

    Linux下常用的时间类型有4个:time_t,struct timeb, struct timeval,struct timespec,clock_t, struct tm.

  • 多核环境下编写程序需注意cache【转载】

    前阵子接触到一道关于数组内部链表(多用于内存池技术)的数据结构的题, 这种数据结构能够比普通链表在cache中更容易命中, 理由很简单, 就是因为其在地址上是连续的(=.=!), 借这个机会, 就对cpu cache进行了一个研究, 今天做一个简单的分享, 首先先来普及一下cpu cache的知识, 这里的cache是指cpu的高速缓存. 在我们程序员看来, 缓存是一个透明部件. 因此, 程序员通常无法直接干预对缓存的操作. 但是, 确实可以根据缓存的特点对程序代码实施特定优化, 从而更好地利用高速缓存. 高速缓存的置换策略会尽可能地将访问频繁的数据放入cache中, 这是一个动态的过程, 所以cache中的数据不会一直不变. 目前一般的机器的cpu cache可分为一级缓存和二级缓存. 一级缓存更靠近cpu, 速度比二级缓存更快. 二级缓存比一级缓存速度更慢, 容量更大, 主要就是做一级缓存和内存之间数据临时交换的地方用.

  • C++执行内存memcpy的效率测试

    在进行memcpy操作时,虽然是内存操作,但是仍然是耗一点点CPU的,今天测试了一下单线程中执行memcpy的效率,这个结果对于配置TCP epoll中的work thread 数量有指导意义。

  • 使用epoll&socket的总结

    针对前面使用boost asio 中遇到的问题,对asio进行封装。

  • linux下IPC latency 进程间通讯延迟测试结果

    linux下选择一个IPC,主要倾向于unix socket,ipc-bench测试下来感觉更有底了,10K数据传输9us的延时在大多数应用中都可以接受了

  • UtraEdit 支持Lua高亮

    UtraEdit 支持Lua高亮

  • FF ASIO 异步消息网络框架

    针对前面使用boost asio 中遇到的问题,对asio进行封装。

  • Boost asio 心得笔记

    io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run, post向任务队列中投递任务,run是执行队列中的任务, 直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。

  • C++ 使用STL string 实现的split,trim,replace

    使用python的时候默认str 对字符串操作支持非常丰富,相信每个C++程序员都自己写过string的strim、split、replace, 写个小工具函数,留着用,以前偷懒,写了好几次,这次总结一下,贴出来。

  • Linux 下设置SVN DIFF

    当执行svn diff 的时候会调用vimdiff 显示diff内容。

  • Boost ASIO proactor 浅析

    Boost asio 的socket的异步非阻塞模式才有的是proactor模式,当IO操作介绍后回调相应的处理函数。 ASIO在Linux平台下的实现基于epoll,但是epoll只支持reactor模式,ASIO通过封装在epoll上实现了proactor。 提到ASIO proactor,ASIO中的所有异步操作都是基于io_service实现的,io_service是ASIO中的任务队列, 并且他负责调用epoll_wait等待IO事件到来。

  • Boost::asio io_service 实现分析

    io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run, post向任务队列中投递任务,run是执行队列中的任务, 直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。

  • 软件中的对象

    领域驱动设计是一种思维方式,目的在于处理具有复杂问题的软件项目。在传统的瀑布软件开发模型中,经历需求分析、设计、开发、测试、交付等阶段, 但是问题在于需求从业务方传递到开发团队的时候并不是很顺畅。尽管需求阶段整理了复杂详细的需求文档,设计阶段也产出了详细设计文档, 但是开发者由于很少参与了问题域的分析和建模,他们对设计文档的理解往往是片面的,有时甚至会推翻设计文档的模型创作一些临时解决方案。

  • 状态机的实现探讨

    状态机的实现探讨

  • FuturePattern

    FuturePattern研究