Linux | c&cpp | Email | github | QQ群:425043908 关注本站

itarticle.cc

01TCMalloc的使用与源码剖析(安装和使用)

TcMalloc是一个由Google开发的,比glibc的malloc更快的内存管理库。通常情况下ptmalloc2能在300ns执行一个malloc和free对,而TcMalloc能在50ns内执行一个malloc和free对。

TcMalloc可以减少多线程程序之间的锁争用问题,在小对象上能达到零争用。

TcMalloc为每个线程单独分配一个线程本地的Cache,少量的地址分配就直接从Cache中分配,并且定期做垃圾回收,将线程本地Cache中的空闲内存返回给全局控制堆。

TcMalloc认为小于(<=)32K为小对象,大对象直接从全局控制堆上以页(4K)为单位进行分配,也就是说大对象总是页对齐的。

TcMalloc中一个页可以存入一些相同大小的小对象,小对象从本地内存链表中分配,大对象从中心内存堆中分配。

02TCMalloc的使用与源码剖析(申请和归还)

TCMalloc给每个线程分配了一个线程局部缓存,小对象的分配是直接由线程局部缓存来完成的,这样就避免了多线程程序中的锁竞争情况。当线程局部缓存中的内存不够时,会将对象从中央数据结构移动到线程局部缓存中,同时定期的用垃圾收集器把内存从线程局部缓存迁移回中央数据结构中。

TCMalloc将尺寸小于等于256 * 1024字节的对象(“小”对象)和大对象区分开来。大对象直接使用页级分配器从中央页堆直接分配。即,一个大对象总是页对齐的并占据了整数个数的页。

03TCMalloc的使用与源码剖析(内存泄露检查)

gperftools是google提供的一套分析工具,包括堆内存检测heap-profiler,内存泄漏分析工具heap-checker和CPU性能监测工具cpu-profiler。众所周知堆外内存的泄漏是很难追踪的,使用MAT等dump分析工具也只能从堆中最大或者最多的对象入手去分析发生泄漏的地方。而gperftools将malloc的调用替换为它自己的tcmalloc,从而统计所有内存分配的行为,帮助我们更快的定位到发生泄漏的地方。

04记游戏运营之好奇和争执

让游戏用户花钱,出于等价交换,那多半也是满足了用户某方面的需求。当一个人在玩游戏的时候,多半是会把自己代入到游戏中去,一些在现实中无法实现的事情肯定希望在游戏中能实现一二,譬如说希望能当个英雄拯救家园,希望能当个将军驰骋疆场,希望能当个皇帝拥有三千后宫佳丽。譬如还有些用户希望见谁就砍谁一刀来抒发心中的不满,我记得当年玩某个游戏时,正悠闲的走在路上去采药,莫名其妙的就挂了,后发现被路人砍了一刀,然后怒气值直接暴涨。

05帧同步游戏的设计

TCP是基于重传来保证可靠性,如果IP包丢包,TCP协议需要等待至少2个往返时延才会重新发送这个数据包,丢包严重甚至会断线,一旦断线,则触发断线重连流程。

这是腾讯一款以忍者格斗为题材的ACT手游给出来的数据,可以看到在各种网络情形下,UDP的表现(延迟分布)基本上都优于TCP。

06如何计算ARPU和LTV

下面以月ARPU值举例:月总收入 / 月活跃用户数——最传统的定义方法

月总收入 / 月付费用户数——实际上就是ARPPU(Average Revenue Per Paying User):平均每付费用户收入——这样计算会让ARPU值看起来很高,报表很好看。

月总收入 / 累积用户总数——一般不会这么计算,因为存在大量已流失用户和沉默用户,将这部分用户纳入统计是没有意义的。但有时候怕ARPU值太高会有舆论或监管压力,会采用这种计算方法来混淆视听。

月总收入 / 用户分层总数——做数据分析时使用,就是将用户分为不同的类型,总收入也是对应分层用户的总收入。例如可以将用户分为不同渠道来源、是否会员用户、通过使用频次划分等等。可以查看不同渠道来源的用户质量。

不同的定义方法,计算出来的ARPU值差异是很大的。所以给出ARPU值的时候,不给具体计算方法都是耍流氓。

07navmesh寻路与漏斗算法

多边形寻路参考PolygonNavMesh 原理:

1. 将unity导出的数据生成凸多边形

2. 找出所有凸多边形共享的边

3. 使用A*算法找出起点到目标点所经过的多边形列表

4. 使用漏斗算法找出顶点坐标

08看懂UML类图和时序图

Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

09定时器之时间轮算法

游戏里面每个Player身上有很多buffs,在每一个tick(最小时间段)都要去检查buff里面的每一个buff是不是过期,产生的效果如何,造成在每个tick里面都去遍历一个长list,明显很不好

10信号量、互斥体和自旋锁

在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象

11Protocol Buffer技术详解

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多

12Protocol Buffer技术详解(C++实例)

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域

我的名片

网名:丰果 | Ranger

职业:游戏开发

现居:上海市

Email:86668082@qq.com




站点信息

  • 建站时间:2016-04-01
  • 文章统计:728条
  • 文章评论:82条
  • QQ群二维码:扫描二维码,互相交流