-
中年大叔的第一台DIY的NAS之系统配置
在中年大叔的第一台DIY的NAS中主要介绍了我搭建NAS的相关硬件选择和一些基础的硬件知识,那本文就总结一下这么久下来要想让NAS增加可玩性,需要安装哪些软件和怎样配置。 这里首先再介绍一下TrueNAS的相关知识,因为后续所有的配置和软件都是基于TrueNAS来进行的。 TrueNAS的基础 TrueNAS是一款基于 Debian Linux 的开源网络存储(NAS)和软件定义存储平台…
-
一个内核参数导致的"幽灵进程"排查过程
最近在将老服务上云,在k8s测试集群发现一个奇怪的问题,一个业务进程会自动启动二个,这里先说一下业务背景: 服务器本身的技术栈是c++&lua,业务使用了hive-framwork框架,服务管理使用了tcm,这里将某个服务上云是将相关的进程打包到一个Image,以富容器的方式运行 服务部署后…
-
NAT穿透及P2P相关技术入门
在搞定中年大叔的第一台DIY的NAS后,要做的就是怎么做内网穿透和进行P2P相关的资源上传和下载,这个过程接触到了NAT类型,UPnP以及P2P相关的技术,下面是基于Claude和相关技术的RFC,官方文档整理的相关知识,相互学习和知识沉淀。 NAT 什么是NAT…
-
中年大叔的第一台DIY的NAS
作为中年男人的一大爱好,终于还是要折腾一下NAS了,最主要的需求还是: 流媒体服务器;希望能够给孩子准备一些好的磨耳朵英语动画片,还有一些不删减的被下架的一些经典的电影,这些视频比较大,不适合放在云存储服务,因为占用空间比较大。 家庭文件备份与共享;这里需求没那么突出,现在全家都是用icloud云盘进行重要的数据备份和分享。其他的多媒体文件主要包括成长图片和视频,都是有多个冷备…
-
2025年度总结
过去的一年 过去一年用一个字概括就是:「忙」。 工作 今年算是比较重要的一年,自己参与的第四个项目08-19上线了,算是自己从开始深度参与的第二个手游项目了。能正常上线到今天的成绩算是工作这么多年最好的成绩了。 看了一下记录,2025-06-03开始996的,到现在了,还是996,估计要加班一周年,有点扛不住呀。不过项目的结果算是好的了,还是比较欣慰的。 我也负责了整体上线的规划和部署…
-
Kubernetes之Services, Ingress, Network基础介绍
之前写过容器化技术之Linux Namespace 和Docker容器网络浅析,有了相关的了解后,我们再来看Kubernetes 的网络模型会更有体会和深入一点。 本文将介绍Kubernetes 的网络模型,其核心思想的关键部分有以下几个部分组成: 每个 Pod 有一个集群内唯一的 IP 地址 在 Kubernetes 集群中,每个 Pod 都像一台独立的小机器…
-
Kubernetes之Workloads基础介绍
Workload(工作负载)是一个你在 Kubernetes 上运行的应用程序。无论你的负载是由单个组件还是由多个一同工作的组件构成, 你都可以在一组 Pod中运行它。 在 Kubernetes 中,Pod 代表的是集群上处于运行状态的一组容器的集合。 这里第一次接触Workload这个概念可能会有点晕,这里从过来人的角度解释一下:Workload(工作负责)是一个逻辑的概念…
-
Kubernetes之Volumes存储基础介绍
在云原生时代,Kubernetes 已经成为容器编排的事实标准。然而,容器的短暂特性带来了一个根本性的挑战:如何持久化和管理数据? 想象这样一个场景:你的应用容器因为某种原因崩溃了,Kubernetes 会立即重启一个新的容器实例。但问题来了——之前容器中的所有数据都消失了!数据库的记录、用户上传的文件、应用的日志…
-
Kubernetes-记录CKA认证
关于CKA考试的考试大纲,在GitHub上cncf/curriculum的仓库中有最新的说明,例如目前是:CKA_Curriculum_v1.34.pdf linuxfoundation考试报名的页面的Domains & Competencies部分也说明了考试的能力知识要求。也给出了Learning Path to Certification,不过这个学习路径里面很多还是要付费的…
-
Kubernetes基础概念之架构,对象和API
Kubernetes 我们用经典的What? Why? How?三段式分析框架来快速的了解和学习Kubernetes。 What Kubernetes是一个可移植,可扩展的开源平台,用于管理容器化的工作负载和服务,支持声明式的配置和自动化。 Kubernetes名字来源于希腊语,译为舵手或飞行员,由于名字过长,经常缩写为K8s…
-
第一个云原生应用搭建之Registry的选择
从接触云原生开始,也过去有很久了,今年由于项目的原因,又荒废了,最近为了CKA的认证考试,所以打算继续整理和学习相关云原生的知识图谱。最近在腾讯云上搭建自己的Kubernetes集群,本文就是记录和整理一下,将自己的一些服务切换到Cloud Native 服务的过程和一些思考,欢迎交流。 整体我会从两个方面来阐述: Image:云原生应用的打包格式…
-
Docker容器网络浅析
在2年之前对容器化技术之Linux Namespace的相关知识进行了学习和梳理,了解了Linux内核如何支持虚拟化的相关技术特性;本文开始对Docker是如何进行容器网络管理的进行阐述;阐述的内容路径主要参考:Docker 官方的Network相关的知识图谱,对容器网络进行深入浅出的解析。 通过这篇文章,希望能够对容器和主机之间是如何进行网络管理的,同一个主机的容器之间…
-
账务管理之beancount
2023年终总结的时候,就定了一个目标:学习资产管理,坚持定期的进行review。学习资产管理的目的还是希望能够对自己的资产有个清晰的认识,以及对外来的一个预期和管理。 从推友那里得知了beancount:一款基于纯文本和复式记账原理的开源记账软件,基于数据完全自主可控和提供相对完善的可视化界面,所以选择通过beancount来入门财务管理的基础和软件使用方式,下面记录了一些学习过程…
-
2024年度总结
时光荏苒,岁月如梭,一转眼2024有过去了,这个年终总结推迟到了农历新年前,才抽空落笔,实在是拖沓他妈给拖沓开门,拖沓到家了。 本周提前一周开始休假,爸妈他们周六已经坐绿皮火车的卧铺回老家了,年假太多了,放着不休就过期了,想想老人家带了两个娃一年,让他们先回老家歇歇,我不想回老家的出发点有两个: 老大的腺样体肥大,生病了会很难受,呆在深圳天气不冷,空气质量也很好。 和爸妈待在一起太久了…
-
构建自己的Running Page
去年的时候,就想开始整理一下自己Keep的跑步数据,最好能够导出来,今年打算切到Strava跑步,因为其相对开放的平台,还提供了开发者中心,我还是希望能够掌控自己的数据,最近发现了yihong的开源项目:running_page用来构建自己的跑步主页,很不错,完全符合我的预期;running_page支持的主要功能包括: 支持主流的运动设备和App导出数据,包括GPX数据…
-
从blueprint工具搭建过程看docker network管理
周二的时候,客户端主程找到我们说有一个工具(docker image),需要我们帮忙搭建一下,丢给我们一个github地址:blueprintue-self-hosted-edition,然后提出了简单的需求: 只有指定的人才可以操作; 要做网络隔离,不能让这个工具后台偷偷的上传机密的数据; 接到需求后,大概看了一下这个工具,是一个UE蓝图的可视化展示的工具…
-
Elasticsearch之Search
我们使用Elasticsearch的最终目的是从数据集中搜索想要的数据,并基于这些数据建立视图;Elasticsearch提供了很简单易用的查询方式来获得数据,例如: 我的服务中有哪些请求处理耗时超过500ms的; 在我的集群中…
-
Elasticsearch之Index和Mapping
本文介绍Elasticsearch的Index和Mapping,要学习Elasticsearch,我觉得首先要知道ES是如何处理数据的,这样才能更好的去构建索引和搜索的模型,当然更深层次的是学习ES底层Luence如果进行索引管理的,这个后面在总结,这里只是先简单的学习ES的Index模块和Mapping是如何工作的,我们可以怎么通过他们来进行doc的字段映射,索引…
-
一位老Vimer的插件配置和开箱即用的Vim镜像
10年Vimer准备转战Visual Studio Code了,这些年的Vim使用来看,和VS Code这种IDE对比下来,稳定性和高效都相对差一点,特别是近两年,频繁的在C++,Go,Lua,Python之间来回切换,能明显感觉Vim的稳定性和效率都会明显下降。不过还是总结一下Vim的使用,和一些插件,以及NeoVim…
-
龙年春节随笔
今天年后第一天上班,两周(请了5天育儿假)的假期转眼间就结束了,有些不舍,也有点开心😂,因为两个娃把我累得够呛。这里记录一些流水账和感想吧。 年前 2月3日开始休假,爸妈早上6:55的飞机,早早的5点就去送机,他们走后,就开启了我和老婆两个人带娃的日子了,由于年前老婆还要继续上班,所以我负责了遛娃,洗澡,洗衣服的重任,老婆则是在忙碌的工作缝隙中负责做饭的重任。 至于为什么不一起回老家过年…
-
2023年度总结
一转眼2023又过去了,因为12-31的深圳宝安马拉松后遗症:跑完膝盖和小腿实在是太疼了,晚上迫切需要休息,第二天元旦也是没恢复过来,导致年终总结鸽到了2号上班才开始写。 作为两个娃的父亲,的确感觉时间加速流逝,周末和假日的时间都在陪他们玩,生病了需要照顾,闲暇了需要陪伴,工作生活交织在一起,的确会感觉到很累,也没有多少时间学习新的东西…
-
Cgo基础和原理
为了能够直接复用优秀的历史资产,Go提供了Cgo这个特性,允许我们在Go代码中调用C/C++的代码。CGO工具作为Go编译器的一部分,负责将Go代码和C代码混合在一起,以便在Go程序中使用C语言。而我现在了解Cgo,其实是因为历史包袱的原因,不得不使用遗留的C的资产。 跨语言的调用实现,做的无非是将caller语言的数据通过wrapper层转换成callee语言的格式…
-
DNS原理浅析:如何查询一个域名所有IP
有一天老婆问我: xxx.yyy.zzz.com 怎么查对应的ip? 我的第一反应是直接ping不就好了,然后又想了一下,如果域名配置了多IP(不同运营商),具体是返回哪个IP呢?是怎么根据自己的出口来决定的呢?又该如何获取一个域名对应的所有IP呢?一连串疑问,其实以前也有想过这个问题,但是一直没有深究,这里还是研究一下…
-
国外银行卡申请攻略
随着ChatGPT的风靡,付费需求成了很多人的选择,没有护照的我们是无法申请国外到普通银行的借记卡或者信用卡的,那么我们只能指望国外的互联网/虚拟银行能够提供给国外用户使用虚拟银行卡服务。 国外的银行卡种类繁多,以下是一些常见的银行卡类型: 借记卡(Debit Card):借记卡是一种与银行账户直接关联的银行卡…
-
2023春节归乡之线路安排
参考高德地图的三条线路 线路1 总长:1430KM 时长:15h14min 途径线路 路线 行驶距离 航空路 1.2公里 宝安大道 1.4公里 机场南路 1.3公里 G15沈海高速 36.5公里 G0422武深高速 6.5公里 杨岗二号隧道 685米 G0422武深高速 12.7公里 禾荷围二号隧道 946米 G0422武深高速 6.5公里 银瓶山隧道 21.5公里 G0422武深高速…
-
2022年终总结
工作 今年算是步入新项目完整的第一年,在项目架构和基础上对FPS类型的游戏也算有所理解和认识,不过由于种种原因,工作上也还是有很多不尽如人意的,有时候感觉有力使不上,比较有成就两件事也就是: 把项目在年中的时候全部切为Git管理,整个GitOps,以及MR,CR流程的规范,使得团队研发走上正轨; 下半年开始的上云工作,虽然只有一些工具上云,以及团结的分享计划,虽然整体后面被老板叫停…
-
浅析Docker基于overlay的存储结构
之前对容器化技术之Linux Namespace的相关知识进行了学习和梳理,了解了Linux内核如何支持虚拟化的相关技术特性;本文开始对Docker的存储结构进行相关梳理; 我们大家可能都知道Docker Image的结构是分Layer的,每层Layer的内容是相对于上一层Layer的差量内容,对于文件的新增或者修改都会创建一个新的Layer…
-
容器化技术之Linux Namespace
在梳理Docker的相关历史发展的时候,知道了现阶段容器化技术的实现基础其实依赖Linux内核的两大核心功能:Namespace和Cgroups,分别用来进行资源的隔离和使用限制;这两大功能是Linux为了虚拟化分别在2002年的「 2.4.19」和2007年的「2.6.24」就开始引入的功能点;本文主要参考Namepsace的manual手册进行相关梳理…
-
和平,王者,暗区突围机器和流量
王者荣耀: 共有 12733台服务器(包含虚拟主机)…
-
Docker入门基础之Client操作
在有了之前的Dockerfile基础知识后,我们知道该如何编写一个简单的Dockfile,那么如果通过docker client命令来进行Image的构建呢,本节就来阐述一些docker client的一些使用; 在介绍docker client的各个操作命令之前先说明一下docker client操作的分类,按照操作的对象不同…
-
Docker入门基础和镜像构建
Docker是什么?Docker有什么用? 按照Docker官方的如下简介 Docker是一个能够提供开发,交付,运行程序的开放平台,Docker可以将应用程序和底层基础设施进行隔离,这样可以快速的进行软件交付;通过Docker,可以像管理应用程序一样管理基础设施,通过利用Docker用于快速交付、测试和部署代码的方法…
-
Python之语法基础入门
今天端午节,为了老婆需要,抽时间整理一下Python的基础语法和一些使用技巧,以及和其他语言的一些差别,方便快速的了解和使用Python;对于使用过C++,Python,Go,Lua的人,相信可以更好的去解释Python的一些设计思想和基础关键点; 本文是基于2014年10月底整理的「Python核心编程」的相关笔记进行重新梳理,由于Python官方已于2020停止了对2.7版本的支持…
-
Git SubModule使用
What 在项目开发过程中,我们可能会有跨项目合作,或者项目组内部多个subgroup之间的协作,以及社区各个开源项目之间的引用,这时候repo需要有一种机制能够引用,跟踪对应的项目;submodule就是git提供的一种项目引用和跟踪的机制;基于此对引用的上游项目也可以进行很容易的进行自定义的修改…
-
Go语言基础和设计
近年来在典型的互联网服务领域,Go相关技术栈已经普及度非常高,公司很多互联网服务属性的部门基本都已经切换到Go,抛弃了我司长久以来的C++技术栈来开发业务逻辑,最近新的游戏项目也尝试全面拥抱云原生,技术栈全面切换到了Go,所以最近在工作之余在看Go的一些基础和设计思想,这里以一个写了5,6年C++的人的角度来记录一下Go的一些基础知识,主要是通过阅读《Go程序设计语言》一书和官方文档…
-
代码构建系统之CMake
基于CMake的构建系统被组织为一组高级逻辑目标。逻辑目标可以分为三类:可执行文件,库,包含自定义命令的自定义目标;目标之间的依赖关系在构建系统中表示,以确定构建顺序和更改时的重新生成规则。 1. CMake语言基础 CMake脚本语言基础的结构可以分为几个部分: 0x1 CMake脚本基础 CMake构建命令的输入必须是以CMake语言编写的文件…
-
分布式系统简介
1. 分布式系统理论基础 CAP定理,又被称作布鲁尔定理(Brewer's theorem),民间又称帽子定理,是加州大学伯克利大学埃里克·布鲁尔在2000年的PODC(分布式计算原理研讨会)上提出的一个猜想,随后在2002年,MIT的赛斯·吉尔伯特和南希·林奇发表了布鲁尔猜想的证明,使之成为一个定理。CAP的概念如下: Consistency(一致性):对于每次读取,都会返回最新的修改…
-
GCC编译优化和调试选项
在没有开启编译优化时,GCC编译器的目的是:减少编译时间和生成预期的调试结果。对于GCC编译的程序,调试的语句都是独立的,可以在程序的任何语句中设置断点,并设置变量的值和修改语句的执行,得到你想要的执行结果。 在开启编译优化的开关时,GCC编译器的目的是:优化程序的性能和减少代码的大小…
-
一人之下手游架构设计
一人之下手游是一款ARPG类型的游戏,核心是横板格斗,异人角色数值养成。在今年5-27号上线至今,服务器表现还算比较稳定,本文简要阐述一下一人手游的服务器架构设计,和大家一起探讨,相互学习~ 1. 架构设计 游戏架构采用分区分服的设计,最开始设计的时候分为WX_IOS, WX_AND, QQ_IOS, QQ_AND四个大区,分安卓和IOS平台主要是苹果爸爸的规定…
-
Service Mesh架构的发展
本文是对Phil Calçado的文章Pattern: Service Mesh的翻译,主要是为了学习一下Service Mesh发展的历史和对Service Mesh的简介,欢迎批评指正。 自从分布式系统的概念提出几十年来(Lynch, Nancy A. (1996), Distributed Algorithms),分布式系统用在了我们很多想不到的地方…
-
ASUS RT-AC1900P刷梅林和相关配置
今年过年由于宝宝还小,所以留在了深圳,没想到武汉肺炎肆虐我中华大地,究竟是天灾还是人祸?正好有时间把我很久之前要折腾我的路由器的事情给做了,本篇文章就是介绍了自己在刷路由器系统的时候的一些学习过程和关注的知识点…
-
一致性HASH的原理和实现
一致性HASH的概念在我们的工作中经常会用到,例如对于集群中一些有状态的服务,我们希望对于同一个玩家的请求总是由固定的服务器来处理,且不会因为该服务的扩缩容而导致请求失效,即转发到了其他服务器处理。那么为什么一致性HASH可以保证被映射到某个服务的请求持久有效呢? 一致性HASH(Consistent Hashing)(维基)定义:一种特殊的HASH,在HASH表大小发生变化时…
-
Git Rebase交互式合并详解
本文简单介绍一下git rebase变基操作的交互式分支合并的过程,对于rebase不了解的同学可以参考官方文档。如下图,现在bob和alice分支都指向1901182 commit提交,master指向1c7af75 commit提交。 当前Git的分支示意图如下: 在bob分支上,先通过git rebase -i master通过交互式的方式在master分支的操作上进行变基操作。 如上图…
-
Git基础和工作流
上周项目组的代码库从svn版本管理切换到了git,随着开源社区github以及开源文化的近年来的火热,git作为开源的分布式版本控制系统,被越来越多开发者和团队使用。在没用使用Git之前,大家对Git的看法可能都是入门比较困能。这周在开发的过程中,我整理了一下Git的一些基础概念和需要注意的实现,和大家一起分享一下。 在使用Git之前,大家对Git的认识可能仅仅就是,它是一个分布式的版本控制系统…
-
SSH协议和原理浅析
作为一名服务器开发,每天都会使用到SSH,我们从第一次接触服务器的时候就接触了SSH,但我们真的了解SSH吗,最近在使用github的private repo的时候发现只有使用公私钥的验证方式才能clone repo到本地,由此决定好好整理一下SSH的设计原理和协议细节,让自己对SSH有一个深入的认识。 下面是SSH WIKI的关于SSH的解释: Secure Shell(安全外壳协议…
-
项目同步Log模块性能分析优化
最近在对KO的注册进行压测的时候发现我们的同步Log模块在现有业务情况下,性能成了一个比较大的瓶颈,虽然同步Log带来了很多的好处:简单,不会出问题。但业务日志量的膨胀导致了很大的性能开销,下面是简单的分析和优化过程。 下图是KO在注册时候的profile得出的分析结果,从perf生成的FlameGraph可以看到占22%左右CPU时间的[unknown]部分,包括IO操作,格式化操作…
-
服务器架构之后台进程防多开
这两天在想如何防进程多开的问题,先说一下项目中是如何做的,其实项目的框架使用了公司tapp组件,进程在启动的时候传入pid文件,tapp本身就会进行进程多开的保护。 在讨论具体防进程多开的实现方式前,先说一下项目过程中遇到的问题,在一开始接触项目的时候其实并没有太注意到这块,后来发现我们自己的开发环境的进程经常会发生启动了多份,那为啥会启动多份呢?本身业务进程的监控都是通过tcm来进行管理的…
-
ZooKeeper的基本介绍
ZooKeeper:分布式应用的分布式协调程序(官方介绍定义)。曾经是Hadoop的一个子项目,但现在是Apache的一个独立的顶级项目。它提供了一组简单的原语,应用程序可以在此之上实现更高级别的服务:分布式同步、配置管理、集群管理、命名服务等。 ZooKeeper的设计易于编程,并且使用了类似文件系统目录树结构的数据模型。zk是java编写的,需要在java虚拟机中运行…
-
性能压测过程中关于CPU使用率的思考
最近在压测过程中,遇到了很多问题,也加深了自己对于程序性能包括CPU使用率,内存占用等各个指标的深入思考。测试同学在压测过程中主要考虑的是TPS,CPU使用率,延迟这几个指标。我们先介绍这个几个常用的性能指标,然后再进入我们的本文的正题,CPU的使用率是怎么来计算的,以及怎么来评估CPU的使用情况。 0x1 常用性能指标 TPS:Transactions Per Second…
-
initializer_list 引发的栈溢出问题
最近项目要进行最后一次线上测试,对一些新增的server进行压测,在对同事用我写的协程框架搭建的ranksvr的时候进行压测的时候,ranksvr挂掉了,由于是压了一段时间才挂掉,所以有特定的业务逻辑触发了栈溢出,由于涉及到调用公司第三方API所以,查起来还是比较麻烦,一开始经过加日志,查看栈使用情况,但是发现在栈溢出前业务逻辑的栈使用情况正常。 这里我查问题的时候犯了一个错误…
-
KO-PR2测试前压测cpu和内存泄漏问题分析
KO-PR2测试前压测cpu和内存泄漏问题分析 11月份进行pr2测试,此前虽然经过了tdr3的服务器性能测试要求,但是3test的0809版本出现过人多的时候CPU过高的问题,后来又新增了很多逻辑代码,所以此次PR2此时前需要进行压力测试,对于性能瓶颈的地方进行修正,为上线做准备。 压测数据准备 这是三测两个版本0713和0809两次的线网测试的协议占比, 按照12000同时在线…
-
性能分析利器之perf浅析
作为服务器后台开发,不仅仅要写业务逻辑,后台意味着高并发,稳定性,当你写了很多逻辑,发现性能有问题的时候,也要学会性能分析,进行性能优化, 也许你会接触很多性能分析工具:valgrind,gperftools,gprof, oprofile, 有时间慢慢一一介绍,在学习perf的过程中,也学习和加深了很多之前的知识,本文抛砖引玉…
-
SWIG之为C/C++的API生成Python调用接口基础
现在游戏业务的cache基本都是接入tcaplus,以前业务自己拥有cache的时候我们可以很方便去通过脚本去访问玩家的数据,所以最近想能不能对tcaplus生成Python的访问接口,由于tcaplus只提供了C++ API屏蔽了底层的协议数据细节,不太好直接写Python访问接口,偶然间接触到了SWIG,差不多花了一周时间…
-
你知道svn的needs-lock属性吗
我们都知道svn对于文本文件可以支持多人合作修改,会自动将多人对于同一文件的操作进行合并,但对于二进制文件只能爱莫能助了! 我们游戏开发中,对于数值配置表通常都是通过excel表格进行配置的,很多策划都对同一个表格修改时就会出现冲突,当冲突发生时,就需要将自己的修改保存到其他地方,然后回滚或删除表格,update为最新的后,再次进行修改提交…
-
你真的知道常量指针和指针常量吗
C中的由于翻译的问题,有时候我们会混淆常量指针和指针常量的含义,但是我们都知道const char * 和char * const的区别,这里确实需要吐槽一下这两个名字的翻译。 常量指针(const pointer): 指针类型是Type * const,指针变量不可以被修该…
-
从水浒到KO
{% asset_img "luffy.jpg" "" %} 拖了一个多月的转岗,今天结束了,回想刚来水浒的时候恍如昨天,时间就这样不经意间从我们身边溜走,2年多,从刚毕业的无知,到现在也算有所成长。感慨颇多,很感谢这两年多的时光中遇到的你们和那些愉快不愉快的经历。 还记得刚来面试那会,被做游戏的工作环境震撼到了,一整面墙的卡通人物,工位上到处都是各种手办,让我认识到原来做游戏可以又这么好的氛围…
-
GCC栈溢出检测技术
前一段时间在写ucontext的协程库的时候,遇到了栈空间溢出问题,然后就想到要研究一下堆栈溢出检测的相关技术。 欢迎批评指正,如果对汇编有一个语法问题可以看我之前的一片文章…
-
TCP连接的建立和关闭详解
1. TCP建立连接(三次握手) 下面两个图是从协议和接口两个角度来解释TCP的三次握手过程(分别摘自计算机网络-谢希仁和UNIX网络编程卷1): 1.1. tcpdump三次握手 下面通过tcpdump来查看tcp建立连接的过程:用nc命令来进行测试…
-
一个整数类型转换导致的线上bug
上周做了一个周年庆的抽奖的需求, 抽奖的规则一般就是在概率的基础上, 将奖品按时间跨度均匀分配, 奖励有实物和虚拟奖励. 抽奖代码的核心在:按时间轴均匀分配奖励和严格控制奖励的数量, 不能出现数量的不一致. 昨天上线后, 今天早上发生了一件从来没有想到会发生的bug, 就是抽奖滚屏公告不见了, 就是前台拉取不到中奖滚屏信息了. 果然是万万没想到呀! 通过脚本直接从后台拉取也是同样的结果,…
-
协程:posix::ucontext用户级线程实现原理分析
在听完leader的<分布式rpc框架的介绍>课程后,对其中协程的实现方式有了基本的了解,无论的POSIX的ucontex,boost::fcontext,还是libco,都是通过保存和恢复寄存器状态,来进行各个协程上下文的保存和切换。所以有了这篇对ucontext实现原理的分析。 文章首先初略的温习了一下汇编的一些基础知识,其次就是ucontext源码分析…
-
Linux内核时钟系统和定时器实现
1. Linux内核时钟系统和定时器实现 Linux 2.6.16之前,内核只支持低精度时钟,内核定时器的工作方式: 系统启动后,会读取时钟源设备(RTC, HPET,PIT...),初始化当前系统时间; 内核会根据HZ(系统定时器频率,节拍率)参数值,设置时钟事件设备,启动tick(节拍)中断。HZ表示1秒种产生多少个时钟硬件中断,tick就表示连续两个中断的间隔时间。在我电脑上,HZ=250…
-
进程中的地址是从何而来
写了这么多年代码,地址这个东西每天都会使用…
-
nginx conf文件结构介绍以及相关配置
本文简单介绍nginx conf文件的结构,已经如何进行配置: 如何配置nginx提供静态内容, 如何配置nginx作为代理服务器, 如何配置转发请求到FastCGI服务 Nginx进程模型:1个主进程,n个工作进程,主进程负责配置和工作进程的管理…
-
Boost共享内存/内存映射文件构建容器的封装
Boost Interprocess组件提供了通过了托管内存段(managed_mapped_file & managed_shared_memory)在共享内存和内存映射文件上进行复杂数据结构构建的功能。 通过boost.ipc构造简单的POD纯数据结构, 非常的简单 c++复制#include <iostream> #include <cstdio> #include…
-
通过Hexo在GitHub搭站全记录
本人github主站:https://anonymalias.github.io 本人csdn主站:http://blog.csdn.net/anonymalias GitHub本身支持建站:只需在自己的repos下建立一个名为:username.github.io的repo…
-
Boost:managed_mapped_file及C++内存分配和对象构造分析
Boost的提供了一套ipc的接口,内存映射文件将文件的内容映射到进程的地址空间。 c++复制#include <boost/interprocess/file_mapping.hpp> 原生的file_mapping接口提供了创建一个内存映射文件,然后通过mapped_region进行进程地址空间的映射,获取映射到进程空间的地址…