- 博客(587)
- 资源 (3)
- 收藏
- 关注
转载 Golang Return Defer 流程分析
在return执行过程中,命名返回值函数的return过程缺少了赋值操作,应该是因为在声明的同时已经经过初始化且函数中可以直接使用该变量,所以可以省略return返回时赋值的步骤。栈帧空间的差异可以得到一个结论:命名返回值函数中使用的x就是实际的返回变量x,而匿名返回值函数中使用的x只是局部变量,实际返回的并不是x,而只是x赋给匿名变量(r0)的值。因为1,2的差异,所以在使用命名返回值时,defer对返回值的影响可以直接体现出来,而在使用匿名返回值时,defer对x的二次赋值无法对匿名返回值产生影响。
2023-02-14 15:46:27
296
转载 K8S Ingress 之 Apache APISIX 解析
其实,本质上来讲,Apache APISIX 是一个基于微服务 API 网关,其不仅可以处理南北向的流量,也可以处理东西向的流量即服务之间的流量。除此之外,其能够友好地支持。完善的文档,易于使用和理解。通常情况下,作为接入层的 Ingress Controller ,其承载着服务的入口流量引入,在生产环境中,我们的业务对系统的可靠性有着更高的要求,然而,基于 Apache APISIX Ingress Controller 其能够支持动态配置,即时生效,降低生产事故的意外及风险,有助于提高运维可维护性。
2022-12-26 15:58:59
1243
转载 深入理解Go之==
使用type可以基于现有类型定义新的类型。新类型会根据它们的底层类型来比较。复制代码myint根据底层类型int来比较。arr4根据底层类型[4]int来比较。本文详尽介绍了 golang 中==操作的细节,希望能对大家有所帮助。
2022-10-27 20:09:28
789
原创 基于帧同步的游戏框架说明
基于帧同步的游戏框架说明一,关于帧同步和状态同步的比较 帧同步 状态同步 安全性 比较差,计算都在客户端,服务器只做转发;有服务器校验的方案,比较繁琐 计算都在服务器 可以将重要的判定都由服务器决定 网络流量 比较小,每一帧只同步玩...
2022-09-23 17:32:45
3280
1
原创 Lua类型系统详解(一)
Lua是一种动态类型的脚本语言,意味着变量没有类型,类型信息包含在值中。目前lua支持八种基本类型:nil,boolean,number,string,table,function,userdata,thread。所有的值都是第一类值,都是可以存储在变量中或者作为函数参数传递,以及作为函数返回值。......
2022-08-18 16:43:12
620
转载 深度解密Go语言之context
Go 1.7 标准库引入 context,中文译作“上下文”,准确说它是 goroutine 的上下文,包含 goroutine 的运行状态、环境、现场等信息。context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等。随着 context 包的引入,标准库中很多接口因此加上了 context 参数,例如 database/sql 包。context 几乎成为了并发控制和超时控制的标准做法。......
2022-08-05 17:04:02
653
转载 k8s 部署 nginx 入门
介绍了如何在mac上利用dockerdesktop搭建k8s运行环境,本文在此基础上,说明如何利用k8s部署nginx。
2022-07-19 16:46:05
433
转载 天美J3工作室服务器主程:我们怎么避免上线即炸服?
炸服,是近两年频繁发生、游戏厂商闻之色变的运营事故。虽然从某种意义上来说,炸服意味着游戏很受欢迎,但由于炸服会致使玩家无法登录、频繁卡顿、反复重连,甚至出现数据丢失和回档,导致游戏口碑暴跌。一旦处理不好,可能会使一个原本的爆款丧失第一波爆发的机会。从服务器架构设计的角度,如何避免上线即「炸服」的事故发生?上周六,在腾讯游戏学院主办的GWB腾讯游戏品鉴会上,天美J3工作室《使命召唤手游》服务器主程Jerry分享了他对于服务器架构设计的心得。其分享的要点如下:从服务器设计角度看,出现炸服往往和架构设计不到位、平
2022-06-30 15:55:50
205
转载 Golang深入理解GPM模型
Golang调度器的由来 Goroutine调度器的GMP模型及设计思想 Goroutine调度场景过程全图文解析我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是“单进程时代”一切的程序只能串行发生。早期的单进程操作系统,面临2个问题:1.单一的执行流程,计算机只能一个任务一个任务处理。2.进程阻塞所带来的CPU时间浪费。那么能不能有多个进程来宏观一起来执行多个任务呢?后来操作系统就具有了最早的并发能力:
2022-06-30 15:54:46
397
转载 Unity手游实战:ECS设计思想和Entitas插件
ECS设计理念并不是一个新兴的事物,早在90年代就存在了。但是走入大众视野则要归功于《守望先锋》这款游戏。2017年的GDC大会上,《守望先锋》团队在大会上分享了《Overwatch Gameplay Architecture and Netcode》,但他们设计的初衷是用来解决预测和回滚的问题。1、编程思想的演变对于我们这代程序员来说,接触和学习的时候就已经是面向对象Object普及的时代。很多人只是在打基础的时候接触过C语言的过程编程。现在又出了一种面向数据的编程,所以现在一起来分析这三种编程思想的不同
2022-06-29 15:51:59
2010
1
原创 深入理解Go切片
一,引子从最近遇到一个bug说起,示意代码如下:func test(a interface{}) { s, _ := a.([]int) s = append(s, 1) fmt.Printf("%v,%p\n", s, &s) return}func main() { s := make([]int, 0) test(s) fmt.Printf("%v,%p\n", s, &s)}期望的是函数里面对切片的操作会返回出来,结果却没有。运行结果如下:
2022-05-25 14:23:40
205
转载 Go语言Hello world(GOPATH和Go Module版)
上一篇文章Go语言入门:Hello world中,我们在Golang Playground中体验了Go语言,编写并运行了一个简单的Hello World,相信大家对Go语言的语法有了一些了解。学习一种编程语言,除了基本的语法,更重要的是要了解如何在实际的工程中使用它。本文中,我会和大家一起,从零开始,安装Go语言,配置环境,安装IDE,开发一个Hello World程序。这个Hello World版我会编写两个版本:GOPATH和Go Module版本。Q:本教程为什么会编写两个版本?A..
2021-12-16 15:12:56
295
转载 分布式锁的实现及原理
分布式锁的实现及原理nove001·2019年05月20日· 844 次阅读目录概述锁是在执行多线程时用于强行限制资源访问的同步机制,在分布式系统场景下,为了使多个进程(实例)对共享资源的读写同步,保证数据的最终一致性,而引入了分布式锁。分布式锁应具备以下特点:互斥性:任意时刻,同一个锁,只有一个进程能持有 安全性:避免死锁,当进程没有主动释放锁(进程崩溃退出),保证其他进程能够加锁 可用性:当提供锁的服务节点故障(宕机)时,“热备” 节点能够接替故障的节点继续提供服务...
2021-03-18 19:02:37
652
转载 skynet源码阅读<1>--lua与c的基本交互
阅读skynet的lua-c交互部分代码时,可以看到如下处理: struct skynet_context * context = lua_touserdata(L, lua_upvalueindex(1)); 那么,问题来了:skynet_context是如何作为upvalue与C函数绑定在一起的呢?这里以luaopen_skynet_core(lua_State *L)为例: int luaopen_skynet_core(lua_State *L) {...
2021-01-14 16:25:23
347
原创 lua5.2引入_ENV的原因
Unlike local variables, which are stored in a special data structure in the interpreter, global variables are just stored in a table. A useful feature in Lua is the ability to change this table per-function, so the function sees a different set of globa...
2021-01-12 14:37:40
383
转载 移动语义(move semantic)和完美转发(perfect forward)
移动语义(move semantic)和完美转发(perfect forward)03 Jun 2014|C++新标准重新定义了lvalue和rvalue,并允许函数依照这两种不同的类型进行重载。通过对于右值(rvalue)的重新定义,语言实现了移动语义(move semantic)和完美转发(perfect forwarding),通过这种方法,C++实现了在保留原有的语法并不改动已存在的代码的基础上提升代码性能的目的。作为一个C++0x标准的初学者,理解这些概念其实还有有一定的困难的,...
2020-12-05 10:10:18
6489
6
转载 分布式租约机制
分布式租约机制1.什么是租约租约(lease)在分布式中一般描述如下:Lease 是由授权者授予的在一段时间内的承诺。 授权者一旦发出 lease,则无论接受方是否收到,也无论后续接收方处于何种状态,只要 lease 不过期,授权者一定遵守承诺,按承诺的时间、内容执行。 接收方在有效期内可以使用颁发者的承诺,只要 lease 过期,接收方放弃授权,不再继续执行,要重新申请Lease。 可以通过版本号、时间周期,或者到某个固定时间点认为Lease证书失效1.1 Lease机制容错能力
2020-07-14 21:58:31
586
转载 lua垃圾回收机制
标记和清扫Lua是一门自动内存管理的语言,它使用的是经典的标记和清扫算法。这个算法的原理其实非常简单,在我们的编程实践中或多或少都有类似的做法,一个理想的实现是这样的:明确对象模型和关系:统一对象模型,比如Lua所有类型的对象都统一为TValue。 所有动态分配的对象串连成一个链表(或多个)。 程序中有少数几个根集对象,比如Lua里的注册表,主线程等,这些根集对象再去引用其他对象,...
2020-03-10 20:15:40
983
转载 DR算法
在飞机游戏中DR的一个例子:1. 飞机的运动速度都是固定的,两台游戏机联机玩,分别是A和B;2. 对于A和B来说,是否需要发送PDU(protocoldataunit,协议数据)是通过阈值控制的。实际运动位置是P1,而DR算法模拟得到的运动位置是P1′,如果P1-P1′大于预先设置的阈值就发送PDU通知对方。3. 每次收到对方的PDU,则更新对方的位置。4. 在没有收到PDU的时候,需要模...
2019-08-06 23:18:10
4782
转载 skynet任务调度分析
云风同学开源的skynet,当前规模是8K+ C代码和2K+ lua代码,实现了一个多线程高并发的在线游戏后台服务框架,提供定时器、并发调度、服务扩展框架、异步消息队列、命名服务等基础能力,支持lua脚本。单服务器支持10K+客户端接入和处理。 我个人比较关注高性能和并发调度这块,这两天分析了一下skynet的代码,简单总结一下。 1. 总体架构 一...
2018-09-03 17:48:28
624
转载 一致性Hash算法背景
一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。 但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人...
2018-08-30 09:51:27
393
翻译 最短路径之Dijkstra算法
今天为大家分享的算法是为解决最短路径算法的Dijkstra算法(简称D算法),这是一个解决从点到点之间最短路径的问题,看下面这张图:这里,我们想要得出节点a(节点1)到节点b(节点5)的最短路径,就是怎么走可以使得权重值的和最小,每一条边都有一个权重。今天我们介绍的D算法就是解决这类问题的,这是一种贪心算法,每次只取权重和最小的点,通过不断加入节点,来更新源节点a到各个节点的最短路径,...
2018-08-27 14:14:49
1660
转载 ubuntu16.04下安装docker
本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队的理想选择。开始安装由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:$ sudo apt-get remove docker docker-engine doc...
2018-08-23 14:19:39
286
转载 linux硬链接与软链接
Linux 系统中有软链接和硬链接两种特殊的“文件”。软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。硬链接则透过文件系统的inode来产生新档名,而不是产生新档案。创建方法都很简单:软链接(符号链接) ln -s source target 硬链接 (实体链接)ln source targetinode要解释清楚两...
2018-08-22 19:43:43
210
转载 TCP、UDP数据包大小的限制
TCP、UDP数据包大小的限制 1、概述首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} 不同的协议层对数据包有不同的称谓,...
2018-08-21 10:07:23
5197
1
转载 docker学习笔记(一)—— ubuntu16.04下安装docker
2018年03月01日 14:53:00阅读数:16199本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队的理想选择。开始安装由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:$ sudo apt...
2018-08-02 19:21:50
360
转载 TCP异常终止(reset报文)
TCP异常终止(reset报文) 在之前做智能家居系统时,师弟做的服务端与WiFI盒子(客户端)进行通信时,总是出现异常情况,然后服务端不停地向客户端发送RESET报文,之前一直都不知道是什么情况,因此一直不知道是什么问题导致的,今天在看《TCP/IP》详解的ICMP部分时,突然又想起这个问题,然后查了一下,找到一篇相关的博客(http://www.vants.org/?post=22),现在整...
2018-06-23 12:11:14
957
转载 通过malloc分配序号查找内存泄漏
The file name and line number in the memory leak report tell you where leaked memory is allocated, but knowing where the memory is allocated is not always sufficient to identify the problem. Often an
2016-07-08 14:59:07
3915
转载 Ubuntu下开启root登陆
Ubuntu下开启root登陆亲手安装过Ubuntu的童鞋都知道,默认安装只会添加一个普通用户名和密码,而超级用户权限则是利用sudo命令来执行。在Ubuntu下使用root登陆或者在shell中用su命令切换到root时会提示错误“认证失败”。因为在安装过程中就没有启用root,也没有给它分配口令。乌帮图用过的其他Linux发行版像Fedora、Mandriva等一般在安装过程中
2016-05-19 11:50:51
3309
转载 ubuntu访问windows共享
ubuntu 12.04LTS已经不支持smbfs文件系统,所以不能用mount -smbfs 来映射windows共享文件夹。 常见有两种方法 1.terminal下 mount //192.168.0.88/share -o user=DOMIAN\\xxx,pass=xxx /mnt/share 注:其中192.168.0.88是wind
2016-03-19 21:19:48
3982
原创 skynet的windows版本
skynet社区有同学做了一个skynet的windows版本,这里我把它稍作编译,做了一个简单的批处理脚本即可运行skynet的示例,提供下载链接如下:http://download.csdn.net/detail/summerhust/9281227仅供学习,生产环境请用正式版本。
2015-11-19 01:00:29
11261
1
转载 ubuntu memcached安装与配置
ubuntu memcached安装与配置 分为两个过程:memcache服务器端的安装和memcached客户端的安装。所谓服务器端的安装就是在服务器(一般都是linux系统)上安装Memcache实现数据的存储所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接口提供)去使用服务器端的Memcache提供的函数,需要p
2015-09-14 11:47:50
3474
转载 谈谈时间函数gettimeofday
我们在程序中会频繁地取当前时间,例如处理一个http请求时,两次调用gettimeofday取差值计算出处理该请求消耗了多少秒。这样的调用无处不在,所以我们有必要详细了解下,gettimeofday这个函数做了些什么?内核1ms一次的时钟中断处理真的可以支持tv_usec字段达到微秒精度吗?它的调用成本在i386/x86_64体系架构上代价一样吗?如果在系统繁忙时,频繁的调用它有问题吗?
2015-09-03 15:51:27
8807
1
转载 Git查看、删除、重命名远程分支和tag
Git查看、删除、重命名远程分支和tagGit查看、删除、重命名远程分支和tag2015-06-15:加入姊妹篇;2013-11-06:加入重命名远程分支的内容;2013-01-09:加入删除远程tag的内容。姊妹篇:使用Git、Git GUI和TortoiseGit这篇文章记录我在使用git的过程中碰到远程分支和tag的相关内容,提
2015-07-13 14:35:40
4458
转载 如何kill杀掉linux系统中的僵尸defunct进程
如何kill杀掉linux系统中的僵尸defunct进程在 Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已 死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性
2015-06-23 10:31:59
5031
转载 RabbitMQ 使用参考
RabbitMQ 使用参考2014-09-08 20:19 更新邹业盛安装基本概念基本形式持久化调度策略5.1. fanout5.2. direct5.3. topic5.4. headers分配策略状态反馈7.1. 信息发布的确认7.2. 消息提取的确认示例: 多消费者, 并行处理
2015-06-02 10:33:00
6662
转载 简易Linux服务器配置--Samba服务
简易Linux服务器配置--Samba服务说明:系统为centos6.3,此配置为学习用,生产环境使用可能会产生问题!1 安装 yum -y install samba 2 修改配置文件 vi /etc/samba/smb.conf 1)全局配置 [global] workgroup = WORKGROUP #要访问的电脑的工作组名,window
2015-04-30 21:34:33
3605
转载 Unity性能优化之Draw Call
Unity性能优化之Draw CallUnity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置、法线、UV等),索引(顶点如何组成三角形),变换(就是物体的位置、旋转、缩放、以及摄像机位置等),相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图
2015-02-12 16:49:48
3671
转载 CSLight研究院之与uLua的效率对比(三)
CSLight研究院之与uLua的效率对比(三) 在脚本中调用Unity自身的方法,比如Resource.Load、 Instantiate 、uLua效率要高一些。但是如果处理脚本与C#之间的来回调用,那么CSLight效率更高一些。测试到这里,我觉得无论你用uLua还是CSLight都可以进行Unity的热更新,因为它俩效率差不多呵呵。就看你的个人喜好了!测试代码比较丑,不
2015-01-29 17:54:37
4512
转载 Unity3D研究院之Android高通骁龙800以上CPU随机crash
Android上的奇葩问题真的是太多了,开始测试反馈说游戏在某些Android手机上随机crash,后来经过详细的测试发现随机闪退的手机都是搭载了高通骁龙800以上的CPU。然后连上真机当crash的时候错误的日志是:signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 6ed5c800然后打印出了一大堆的内存信息,今天记录一下解决方案
2015-01-22 15:29:39
4743
非常全面的测试学习宝典,入门级
2008-09-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人