- 博客(19)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 谈极品技术 tanjp.com 文章汇总
谈极品技术 tanjp.com这是一个极品的时代,让我们一起谈谈极品时代下的各种信息技术!探索各种服务端技术,如 游戏服务端,分布式架构,微服务,大数据采集分析,运维管理和监控,高并发高可用,数据一致性,等等……游戏服务端架构2020-04-24_分区分服与大规模跨服功能2020-04-26_百万用户在线的游戏架构承载能力分析编程内外功修炼C++11内存序me...
2020-04-27 11:20:16
200
原创 定时器实现过程遇到的问题
原文转自:http://www.tanjp.com/archives/203(即时修正和更新)定时器实现过程遇到的问题在服务端的程序里,时间是一个很常用,几乎无处不在的变量。如果不正确使用时间,将会导致灾难性的数据错误。所以,正确使用时间非常重要!怎样才算是正确使用时间?首先,我们得知道在程序世界里面,时间有哪些值?1、协调世界时,又称世界统一时间,世界标准时间,国际协...
2019-05-28 20:41:52
917
原创 时间轮(Timing Wheel)算法-高性能定时器策略笔记
原文转自:http://www.tanjp.com/archives/199(即时修正和更新)什么时候需要定时器?我们都知道程序是能快速运算出结果,几乎在一瞬间就可以把结果算出来。但是这个前提是所有输入条件都拿到手的情况下,如果有些输入条件 A 你并不知道什么时候能符合,那怎么办?写一个whlie循环一直检查?这样无疑很浪费CPU,显然行不通。有经验程序员可以已经想到办法,把这...
2019-05-17 20:58:28
4077
原创 Actor模式封装MongoDB C驱动-多连接并发与自动重试
原文转自:http://www.tanjp.com/archives/192(即时修正和更新)Actor模式封装异步的MongoDB C驱动MongoDB C驱动(MongoDB C Driver http://mongoc.org/),提供了同步的DB访问存储接口,在高并发的业务系统,同步操作会阻塞业务逻辑,是高并发的一大障碍。所以需要设计异步的接口来满足业务系统的需求。利用...
2019-05-17 01:05:07
307
原创 Actor模式实现高并发的异步文件日志系统(Actor Log)
原文转自:http://www.tanjp.com/archives/176(即时修正和更新)文件日志异步读写我们都知道普通的读写文件打开文件都是同步的,比如C的fopen, fclose, fread等。并且磁盘的访问速度远远的低于内存,所以操作系统要阻塞等待磁盘设备准备好才进行读写。如果采用同步,那么上次业务逻辑将会阻塞挂起,等待磁盘把数据准备好,再通知操作系统上报到应用层。高...
2019-05-09 23:23:43
488
原创 Actor模式之高性能并发框架的实现
原文转自:http://www.tanjp.com/archives/149(即时修正和更新)概念Actor模式是一种并发模型,其目标是充分利用计算机多核的优势,把一个大问题分拆成多个小问题并发处理,或者把多个平行的问题并发处理。一个Actor指的是一个最基本的计算单元。它能接收一个消息并且基于其执行计算。Actor一大重要特征在于Actor之间相互隔离,它们并不互相共享内存。也就是说,...
2019-05-08 23:02:41
2104
1
原创 双缓冲安全队列(DoubleCacheQueue)与自旋锁(SpinMutex)
原文转自:http://www.tanjp.com/archives/144(即时修正和更新)双缓冲安全队列(DoubleCacheQueue)双缓冲区,故名思义就是要有两个缓冲区(简称A和B)。这两缓冲区,总是一个用于生产者,另一个用于消费者。当缓冲区触发某个条件时,进行一次切换(先前被生产者写入的转为消费者取出,先前消费者取出的转为生产者写入)。而这个触发的条件,一般是以快速消...
2019-05-07 15:51:14
1231
原创 窃取式调度器(Stealing Scheduler)-高并发
原文转自:http://www.tanjp.com/archives/141(即时修正和更新)窃取式调度器(Stealing Scheduler)N个业务系统生产作业加入到 M+1个队列里面(优先加入到当前线程所在队列),队列中的作业被 M个线程按一定的规则消费。M个线程都对应一个线程局部存储的队列,和一个公共的队列。该规则按以下次序执行:1、优先处理本线程生产的作业。2、...
2019-05-07 15:46:42
608
原创 分配式调度器(Allocation Scheduler)-有锁与无锁实现
原文转自:http://www.tanjp.com/archives/139(即时修正和更新)分配式调度器(Allocation Scheduler)N个业务系统生产作业加入到 1个分配队列里面,由 1个分配线程负责将队列中作业分配给 M个工作队列,每个工作队列对应 1个工作线程来消费作业。对分配队列的抢占为:N*1,对工作队列的抢占为1*1,也就是说总体队列的抢占为 N*1+1*1*M...
2019-05-07 15:41:21
292
原创 抢占式调度器(Preemptive Scheduler)-有锁与无锁实现
原文转自:http://www.tanjp.com/archives/137(即时修正和更新)抢占式调度器(Preemptive Scheduler)N个业务系统生产作业加入到一个队列里面,队列中的作业被 M个线程抢先消费。也就是说,N的业务系统抢着把生产出来的作业插入到队列,同时 M个线程抢着消费该队列的作业,对队列的抢占非常激烈。可简单竞争抽象为: N*M。 ...
2019-05-07 15:34:21
1355
原创 高性能仿函数(FixedFunction)-替代std中的function
原文转自:http://www.tanjp.com/archives/135(即时修正和更新)固定大小仿函数(FixedFunction)仿函数是C++很多新特性的基础,如 lambda表达式。但是STL提供的std::function兼顾了太多情况,性能不高。于是做了优化,实现代码如下:template <typename SIGNATURE, size_t STOR...
2019-04-25 12:32:08
608
原创 全局唯一标识(UID)-多种实现方案
原文转自:http://www.tanjp.com/archives/132(即时修正和更新)目录64位全局唯一标识62进制字符串唯一ID32位唯一ID(一年(388天)内的每秒内有128个唯一值)32位唯一ID(一个月(48天)内的每秒内有1024个唯一值)32位唯一ID(一周(12天)内的每秒内有4096个唯一值)64位全局唯一标识snowflake是用64位...
2019-04-12 23:39:45
2729
原创 非严格优先队列-O(1) 时间复杂度
原文转自:http://www.tanjp.com/archives/124(即时修正和更新)分组安全队列 - 非严格优先队列 O(1) 时间复杂度传统的优先队列,都是采用二叉树(堆)的方式来实现,插入和删除都需要维护堆顶元素最大或最小,需要O(logN)的时间复杂度。在某些多线程环境下,把队列当作一个数据交换的纽带,这种开销也是非常大的,于是设计了非严格的优先队列,基满足业务需求...
2019-04-11 15:41:47
1177
原创 安全队列(SafeQueue)-多线程安全
原文转自:http://www.tanjp.com/archives/118(即时修正和更新)多线程安全的先进先出队列多线程安全的队列,可支持临界条件的阻塞与非阻塞两种模式切换。可通过条件变量来挂起等待加入/取出,条件满足时又能即时唤醒加入/取出。思路和想法都比较简单,就是一些应用的方法,就不多说了,直接看代码很好了解。template<typename tpTyp...
2019-04-09 15:23:35
2441
原创 单例模式(Singleton)-多线程安全
原文转自:http://www.tanjp.com/archives/115(即时修正和更新)多线程安全的单例模式单例模式,是一种常用的软件设计模式。通过单例模式可以保证系统中,应用该模式的一个类型只有一个实例。多线程环境下,建议使用 sptr() 获得共享智能指针使得对象的释放得以延伸到最后一个有效引用使用完。各个类型的单例对象的作用域为全局(类似全局变量),但同时可以...
2019-04-08 16:50:31
211
原创 C++编码规范
原文转自: http://www.tanjp.com/archives/110(即时修正和更新)前言使代码易于管理的方法之一是加强代码一致性。让任何程序员都可以快速读懂你的代码这点非常重要。保持统一编程风格并遵守约定意味着可以很容易根据“模式匹配”规则来推断各种标识符的含义.。创建通用,必需的习惯用语和模式可以使代码更容易理解。在一些情况下可能有充分的理由改变某些编程风格,但我们还是应...
2019-04-08 16:44:04
384
原创 Actor模式之高性能并发框架的构想
原文转自: http://www.tanjp.com/archives/106(即时修正和更新)Actor模式之高性能并发框架的构想最近接触到了Actor模型,以及了解云风的skynet框架,想重新实现一套高并发的框架。想想做游戏也七八年了,接触过一些不同的游戏框架。有的使用多线程并发,但是业务逻辑各种加锁,导致项目后期维护成本不敢想像的大。后来,主流的方向对采用单线程做主业...
2017-05-19 02:17:30
1172
原创 屏蔽词、模糊检索实现—字典树的应用
原文转载:http://www.tanjp.com/archives/90(即时修正和更新)屏蔽词、模糊检索实现—字典树的应用名词简述屏蔽词,就是预先给定一些词汇,在整个产品中都不能有这些词汇出现,譬如文字聊天,用户名,帮派名等等,反正所有涉及到文字输入的地方都需要过滤这些屏蔽词。在项目中,屏蔽词功能基本上是必须的,要不然上线都没法通过版署的审核。模糊检索,其实这是一大块专业领域...
2017-04-13 13:46:06
1539
原创 面向对象设计原则
原文转载:http://www.tanjp.com/archives/66(即时修正和更新)所谓“好的面向对象设计”是那些可以满足“应对变化,提高复用”的设计。对象是什么?>>从概念层面讲,对象是拥有某种责任的抽象。>>从规格层面讲,对象是一系列可以被其他对象使用的公共接口。>>从语言实现层面来看,对象封装了代码和数据。怎样才能设...
2017-03-28 17:22:05
292
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人