<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[adolph58的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/adolph58</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; adolph58]]></copyright><item><title><![CDATA[无锁队列的实现]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/108105247</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/108105247</guid><author>adolph58</author><pubDate>Wed, 19 Aug 2020 17:15:34 +0800</pubDate><description><![CDATA[关于CAS等原子操作

在开始说无锁队列之前，我们需要知道一个很重要的技术就是CAS操作——Compare &amp; Set，或是 Compare &amp; Swap，现在几乎所有的CPU指令都支持CAS的原子操作，X86下对应的是CMPXCHG汇编指令。有了这个原子操作，我们就可以用其来实现各种无锁（lock free）的数据结构。

这个操作用C语言来描述就是下面这个样子：（代码来自Wikipedia的Compare And Swap词条）意思就是说，看一看内存*reg里的值是不是oldval，..]]></description><category></category></item><item><title><![CDATA[细谈网络同步在游戏历史中的发展变化（中）]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/107849298</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/107849298</guid><author>adolph58</author><pubDate>Thu, 06 Aug 2020 20:42:51 +0800</pubDate><description><![CDATA[非常不好意思让大家久等了，上一篇文章细谈网络同步在游戏历史中的发展变化（上）我们讨论了网络同步的基本概念以及锁步同步（帧同步）的发展历史，这篇我们继续讲述状态同步的发展历程与基本原理。本文作者依旧是网易游戏雷火的游戏开发工程师

@Jerish

，欢迎大家在评论区提问以及和我们互动！

目录（中篇）：

四. 状态同步 State Synchronization

1.雷神之锤与快照同步（Quake and Snapshot）

2.《星际围攻：部落》中的网络架构（The TRIBES Engine ..]]></description><category></category></item><item><title><![CDATA[细谈网络同步在游戏历史中的发展变化（上）]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/107849205</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/107849205</guid><author>adolph58</author><pubDate>Thu, 06 Aug 2020 20:38:10 +0800</pubDate><description><![CDATA[本文作者为网易游戏雷火的游戏客户端开发工程师

@Jerish

，他参考了大量资料和论文，从网络同步的基本概念讲起，进一步深入到服务器架构与同步算法的实现细节。本文一共分上下两篇。上篇包括网络同步的基本概念与帧同步的实现细节，下篇则将和大家讨论状态同步，通信协议，常见的同步优化手段等，希望对小伙伴们有所助益。

欢迎大家在评论区提问以及和我们互动哦！

另外，由于涉及到比较久远的历史，部分内容无法考证，如果发现文章中有描述错误的地方还请指出。

目录（上篇）：

一.网络同步概念理解

二.网络架构与传.]]></description><category></category></item><item><title><![CDATA[平衡二叉树、B树、B+树、B*树 理解其中一种你就都明白了]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/107654065</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/107654065</guid><author>adolph58</author><pubDate>Wed, 29 Jul 2020 09:12:41 +0800</pubDate><description><![CDATA[1、平衡二叉树

（1）由来：平衡二叉树是基于二分法的策略提高数据的查找速度的二叉树的数据结构；

（2）特点：

平衡二叉树是采用二分法思维把数据按规则组装成一个树形结构的数据，用这个树形结构的数据减少无关数据的检索，大大的提升了数据检索的速度；平衡二叉树的数据结构组装过程有以下规则：

非叶子节点只能允许最多两个子节点存在，每一个非叶子节点数据分布规则为左边的子节点小当前节点的值，右边的子节点大于当前节点的值(这里值是基于自己的算法规则而定的，比如hash值)；





平衡树的层级结构：因为平衡二.]]></description><category></category></item><item><title><![CDATA[编码格式简介（ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE）]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/103407196</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/103407196</guid><author>adolph58</author><pubDate>Thu, 05 Dec 2019 16:21:06 +0800</pubDate><description><![CDATA[编码一直是让新手头疼的问题，特别是 GBK、GB2312、UTF-8 这三个比较常见的网页编码的区别，更是让许多新手晕头转向，怎么解释也解释不清楚。但是编码又是那么重要，特别在网页这一块。如果你打出来的不是乱码，而网页中出现了乱码，绝大部分原因就出在了编码上了。此外除了乱码之外，还会出现一些其他问题（例如：IE6 的 CSS 加载问题）等等。我写本文的目的，就是要彻底解释清楚这个编码问题！如果你遇...]]></description><category></category></item><item><title><![CDATA[例解 autoconf 和 automake 生成 Makefile 文件]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/93773559</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/93773559</guid><author>adolph58</author><pubDate>Wed, 26 Jun 2019 20:10:44 +0800</pubDate><description><![CDATA[引子

无论是在Linux还是在Unix环境中，make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件，我们都经常要用到make或 make install。利用make工具，我们可以将大型的开发项目分解成为多个更易于管理的模块，对于一个包括几百个源文件的应用程序，使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。

但是如果通过查阅ma...]]></description><category></category></item><item><title><![CDATA[A星寻路算法介绍]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/89454378</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/89454378</guid><author>adolph58</author><pubDate>Mon, 22 Apr 2019 16:18:17 +0800</pubDate><description><![CDATA[A星寻路算法介绍

你是否在做一款游戏的时候想创造一些怪兽或者游戏主角，让它们移动到特定的位置，避开墙壁和障碍物呢？

如果是的话，请看这篇教程，我们会展示如何使用A星寻路算法来实现它！

在网上已经有很多篇关于A星寻路算法的文章，但是大部分都是提供给已经了解基本原理的高级开发者的。

本篇教程将从最基本的原理讲起。我们会一步步讲解A星寻路算法，幷配有很多图解和例子。

不管你使用的是什么编程语言...]]></description><category></category></item><item><title><![CDATA[游戏服务器性能分析]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/89024119</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/89024119</guid><author>adolph58</author><pubDate>Thu, 04 Apr 2019 15:24:09 +0800</pubDate><description><![CDATA[加日志统计法：
1、统计CS消息频率，找出高频的协议。分析高频协议是否合理并寻找合适的解决办法。
2、分析SS消息频率，思路同上。
3、分析定时器的逻辑，看是否有频率太高或者耗时太久的操作。

gperf工具分析法（使用ltrace、strace工具收获不大）：
1、发现协议压缩很耗时。
2、发现资源查找很耗时，虽然单次查询很快，但是频率太高就会耗性能。
3、memset耗时较高，是协议初始化导致...]]></description><category></category></item><item><title><![CDATA[C++项目编译优化]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88913971</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88913971</guid><author>adolph58</author><pubDate>Sat, 30 Mar 2019 16:05:43 +0800</pubDate><description><![CDATA[随着项目的不断完善，代码是越来越多，编译速度也是越来越慢。为了提高开发、发布的效率，我们做了不少优化尝试，下面列出一些能明显缩短编译时间的方法：

    1、我们的协议是用pb定义的，pb生成的代码编译非常耗时。之前是每个功能模块都编译一次协议文件，这样就导致了重复编译，浪费时间。现在改为将PB生成的代码打包到静态库，各模块链接就好了。

    2、增加开发机的C...]]></description><category></category></item><item><title><![CDATA[C++ 11 Lambda表达式]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88767707</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88767707</guid><author>adolph58</author><pubDate>Sat, 23 Mar 2019 20:29:50 +0800</pubDate><description><![CDATA[C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式，可以方便的定义和创建匿名函数。对于C++这门语言来说来说，“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥，但很多高级语言在很早以前就已经提供了Lambda表达式的功能，如C#，Python等。今天，我们就来简单介绍一下C++中Lambda表达式的简单使用。

声明Lambda表达式

Lambda表达式完整的声...]]></description><category></category></item><item><title><![CDATA[如何用十条命令在一分钟内检查Linux服务器性能]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88766976</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88766976</guid><author>adolph58</author><pubDate>Sat, 23 Mar 2019 19:50:40 +0800</pubDate><description><![CDATA[通过执行以下命令，可以在1分钟内对系统资源使用情况有个大致的了解。


	uptime
	
	
	dmesg | tail
	
	
	vmstat 1
	
	
	mpstat -P ALL 1
	
	
	pidstat 1
	
	
	iostat -xz 1
	
	
	free -m
	
	
	sar -n DEV 1
	
	
	sar -n TCP,ETCP 1
	
	
	top
	
其中一些命...]]></description><category></category></item><item><title><![CDATA[C90、C99、C11——C语言的三套标准]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88726621</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88726621</guid><author>adolph58</author><pubDate>Thu, 21 Mar 2019 21:39:49 +0800</pubDate><description><![CDATA[C90 标准

    由于C语言被各大公司所使用（包括当时处于鼎盛时期的 IBM PC），因此到了 1989 年，C语言由美国国家标准协会（ANSI）进行了标准化，此时C语言又被称为 ANSI C。而仅过一年，ANSI C 就被国际标准化组织 ISO 给采纳了。此时，C语言在 ISO 中有了一个官方名称——ISO/IEC 9899: 1990。其中：

  a、 9899 是C语言...]]></description><category></category></item><item><title><![CDATA[C++语言的历史和标准化]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88725314</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88725314</guid><author>adolph58</author><pubDate>Thu, 21 Mar 2019 20:54:32 +0800</pubDate><description><![CDATA[C++迭代速度相对来说还是比较慢的，2010年以后，C++的新版本迭代速度有所加快，这一点，从C++标准版本的历史发布图1就可以看出来：

                        

                                   ...]]></description><category></category></item><item><title><![CDATA[C++ 编译器对C++11、14、17的支持情况]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88719943</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88719943</guid><author>adolph58</author><pubDate>Thu, 21 Mar 2019 17:03:56 +0800</pubDate><description><![CDATA[C++ 编译器支持情况表

下表为各个编译器对新的 C++ 功能特性的支持情况。这些功能特性包括C++11、C++14、C++17和之后接受的标准版本 (C++20/C++2a)，还有几个技术规范的内容。



C++2a 功能特性

注意，此列表可能根据 C++2a 标准草案的演化而更改。



C++2a 功能特性
			
			提案
			
			版本
			
			...]]></description><category></category></item><item><title><![CDATA[docker核心概念（镜像、容器、仓库）及基本操作]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88650951</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88650951</guid><author>adolph58</author><pubDate>Mon, 18 Mar 2019 21:44:58 +0800</pubDate><description><![CDATA[概要

docker是一种linux容器技术。容器有效的将由单个操作系统挂管理的资源划分到孤立的组中，以便更好的在组之间平衡有冲突的资源使用需求。可简单理解为一种沙盒 。每个容器内运行一个应用，不同的容器之间相互隔离，容器之间也可以建立通信机制。容器的创建和停止都十分快速，资源需求远远低于虚拟机。



好处

能高效地构建应用。

对于运维开发来说，

能...]]></description><category></category></item><item><title><![CDATA[C++引用详解]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88599621</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88599621</guid><author>adolph58</author><pubDate>Sat, 16 Mar 2019 15:55:53 +0800</pubDate><description><![CDATA[引用的概念

引用：就是某一变量（目标）的一个别名，对引用的操作与对变量直接操作完全一样。

引用的声明方法：类型标识符 &amp;amp;引用名=目标变量名；

　　如下：定义引用ra，它是变量a的引用，即别名。

　　　　int a;

　　　　int &amp;amp;ra=a;

　　（1）&amp;amp;在此不是求地址运算符，而是起标识作用。

　　（2）类型标识符是指目标变量的类型。

　　（3）声明引用时...]]></description><category></category></item><item><title><![CDATA[devops]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88319592</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88319592</guid><author>adolph58</author><pubDate>Thu, 07 Mar 2019 20:24:58 +0800</pubDate><description><![CDATA[转自百度百科。

   DevOps（Development和Operations的组合词）是一组过程、方法与系统的统称，用于促进开发（应用程序/软件工程）、技术运营和质量保障（QA）部门之间的沟通、协作与整合。它是一种重视“软件开发人员（Dev）”和“IT运维技术人员（Ops）”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程，来使得构建、测试、发布软件能够更加...]]></description><category></category></item><item><title><![CDATA[云服务里IaaS、PaaS、SaaS的区别与联系]]></title><link>https://blog.youkuaiyun.com/adolph58/article/details/88238087</link><guid>https://blog.youkuaiyun.com/adolph58/article/details/88238087</guid><author>adolph58</author><pubDate>Wed, 06 Mar 2019 15:33:51 +0800</pubDate><description><![CDATA[“云计算”其实就是使用互联网来 接入存储 或者 运行在远程服务器端的应用，数据，或者服务。   任何一个在互联网上提供其服务的公司都可以叫做云计算公司。其实云计算分几层的，分别是 Infrastructure（基础设施）-as-a-Service，Platform（平台）-as-a-Service，Software（软 件）-as-a-Service。基础设施在最下端，平台在中...]]></description><category></category></item></channel></rss>