摘要:话不多说, 直接上地址: https://xiyou4you.us/ 延迟超级低 邀请地址: egmkang at outlook.com 阅读全文
posted @ 2020-04-26 11:29 egmkang 阅读(154) 评论(0) 推荐(1) 编辑
摘要:优化C#服务器的思路和工具的使用 优化服务器之前, 需要先对问题的规模做合理的预估, 然后对关键的数据做采样, 做对比, 看和自己的预估是否一致, 误差大在什么地方, 是预估的不对, 还是系统实现有问题. 策划对某游戏服务器的要求是3000到5000人在线. 大概的估算 玩了玩游戏, 在前期任务的流 阅读全文
posted @ 2020-09-16 10:28 egmkang 阅读(527) 评论(0) 推荐(7) 编辑
摘要:通过P/Invoke加速C#程序 任何语言都会提供FFI机制(Foreign Function Interface, 叫法不太一样), 大多数的FFI机制是和C API. C#提供了P/Invoke来和操作系统, 第三方扩展进行交互. FFI通常用来和老的代码交互, 例如有大量的遗留代码, 重写成本 阅读全文
posted @ 2020-09-15 10:02 egmkang 阅读(477) 评论(1) 推荐(7) 编辑
摘要:C# Alloc Free编程之实践 上一篇说了Alloc Free编程的基本理论. 这篇文章就说怎么具体做实践. 常识 之所以说是常识, 那是因为我们在学任何一门语言的时候, 都能在各种书上看到各种各样的best practice. 这些内容也确实是最佳实践, 需要去遵守. 但是现实代码里面看到, 阅读全文
posted @ 2020-09-14 09:47 egmkang 阅读(356) 评论(7) 推荐(11) 编辑
摘要:C# Alloc Free编程 首先Alloc Free这个词是我自创的, 来源于Lock Free. Lock Free是说通过原子操作来避免锁的使用, 从而来提高并行程序的性能; 与Lock Free类似, Alloc Free是说通过减少内存分配, 从而提高托管内存语言的性能. 基础理论 对于 阅读全文
posted @ 2020-09-11 12:35 egmkang 阅读(2731) 评论(16) 推荐(19) 编辑
摘要:C#多线程逻辑编程 多线程编程以难著称, 有很多人碰见多线程编程就会畏缩, 不敢前进, 言必称死锁/卡死. 但是合理编程是不会碰到死锁这种问题. 对语言了解 工欲善其事必先利其器, 必须要对语言提供的同步机制和期扩展有所了解. Linux系统(库)提供的同步机制有: 锁 原子操作 条件变量 其中原子 阅读全文
posted @ 2020-09-10 10:08 egmkang 阅读(337) 评论(0) 推荐(2) 编辑
摘要:网络框架的选择 C++语言里面有asio和libuv等网络库, 可以方便的进行各种高效编程. 但是C#里面, 情况不太一样, C#自带的网络API有多种. 例如: Socket TcpStream(同步接口和BeginXXX异步接口) TcpStream Async/Await Pipeline I 阅读全文
posted @ 2020-09-09 11:23 egmkang 阅读(709) 评论(5) 推荐(5) 编辑
摘要:话不多说, 直接上地址: https://xiyou4you.us/ 延迟超级低 邀请地址: egmkang at outlook.com 阅读全文
posted @ 2020-04-26 11:29 egmkang 阅读(154) 评论(0) 推荐(1) 编辑
摘要:估计很多人在网上看到各种各样的DeepClone实现, 例如: 1. 通过BinaryFormatter进行二进制序列化 这玩意儿序列化出来的东西还带namespace类型, 尺寸非常大, 调试一下就知道极其不靠谱 有些人又开始动歪脑筋了, 说我搞一个JSON序列化, 或者BSON序列化可不可以 2 阅读全文
posted @ 2020-04-13 23:30 egmkang 阅读(472) 评论(7) 推荐(0) 编辑
摘要:题目很简单, 就是IMessage对象怎么变成Byte[] 答案1: msg.ToByteArray() 这肯定不符合我们的要求 答案2: using var memoryStream = new MemoryStream(); using var codedOutputStream = new C 阅读全文
posted @ 2020-04-04 23:43 egmkang 阅读(433) 评论(0) 推荐(2) 编辑
摘要:闲话少说直接说步骤: 1. 羊毛 https://www.namebase.io/airdrop 要求条件: 1) 要有github账号 2) 2019年2月之前有16+个follower 3) 要有当时的私钥 2. 先去namebase.io注册账号 注册账号有一步是需要身份证或者护照的, 我用了 阅读全文
posted @ 2020-02-23 12:03 egmkang 阅读(1885) 评论(1) 推荐(0) 编辑
摘要:长链接发送request/response时, 绝大部分包都是小包, 而每个小包都要消耗一个IP包, 成本大约是20-30us, 普通千兆网卡的pps大约是60Wpps, 所以想要提高长链接密集IO的应用性能, 需要做包的合并, 也称为了scatter/gather io或者vector io. 在 阅读全文
posted @ 2020-02-12 15:52 egmkang 阅读(842) 评论(0) 推荐(3) 编辑
摘要:网上的教程大都是手动通过protoc编译, 比较难用 给当前工程添加"Google.Protobuf"和"Grpc.Tools"的引用(通过nuget), 然后添加proto文件, 编辑.csproj文件 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGrou 阅读全文
posted @ 2020-02-04 01:35 egmkang 阅读(347) 评论(0) 推荐(1) 编辑
摘要:服务器内经常会有一些多读少写的场景, 具体问题需要分析一下, 如果是这种场景, 这边提供一个思路来降低多线程程序锁的冲突, 进而极大的提升程序的性能. 例如一个Dictionary<String, String> A, 需要多读少写, 不会很频繁的写, 而且不会修改Value值, 那么可以构造一个A 阅读全文
posted @ 2020-01-28 16:39 egmkang 阅读(184) 评论(0) 推荐(0) 编辑
摘要:Linux下有vsyscall来优化一些例如time(NULL), gettimeofday这种调用的消耗; 但是Windows下, 没有类似的东西, 但是思路还是有的 1. 程序启动的时候, 获取一下准确的时间戳 2. 然后每次需要获取时间的时候, 获取一下流逝的时间, 可以通过获取CPU的tic 阅读全文
posted @ 2020-01-28 16:26 egmkang 阅读(295) 评论(0) 推荐(0) 编辑
摘要:创建一个bat脚本, 里面写上: reg delete HKEY_CURRENT_USER\Software\JetBrains\dotMemory /freg delete HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ex 阅读全文
posted @ 2020-01-28 16:18 egmkang 阅读(330) 评论(0) 推荐(0) 编辑
摘要:ZeptoVM是一个俄罗斯的云提供商, 由于提供了黑龙江北边的机房, 所以延迟比较低 注意一定要选Khabarovsk节点, 这个节点延迟很低, 我在上海延迟大约有70ms 缺点就是比较贵, 按照年付费价格才和其他的vps提供商差不多, 也没有什么折扣 购买地址 : https://www.zept 阅读全文
posted @ 2019-10-15 10:03 egmkang 阅读(797) 评论(0) 推荐(0) 编辑
摘要:在C++里面, 我们可以根据一个消息的名称, 动态的创建一个实例 这个在protobuf里面是集成进去了, 在其他语言也有类似的东西. 通过这个, 我们就让轻松实现编解码库, 而不需去构造一个映射表. 但是, 但是在rust里面, 是没有这种东西的. 比较难的地方是rust全局变量必须要实现Send 阅读全文
posted @ 2019-09-07 17:22 egmkang 阅读(512) 评论(0) 推荐(0) 编辑
摘要:又拾起了rust语言, 想写一点东西玩一玩, 但是发现连一个获取本机IP地址的库都没有, 还得挽起袖子自己撸. https://crates.io/crates/local_ipaddress 没有用ifconfig, 也没有扫描网卡, 就开了一个UdpSocket尝试着去连一个IP地址, 然后看本 阅读全文
posted @ 2019-09-03 01:13 egmkang 阅读(420) 评论(0) 推荐(0) 编辑
摘要:先编辑/etc/resolv.conf, 添加一个DNS, 比如114.114.114.114 然后sudo apt-get install resolvconf 然后编辑/etc/resolvconf/resolv.conf.d/original, 添加DNS设置, /etc/resolv.con 阅读全文
posted @ 2018-01-13 22:16 egmkang 阅读(3056) 评论(0) 推荐(0) 编辑
摘要:看了一圈, 没看到稍微好用的ConnectionPool, 除了一个aiomysql, 但是这个是异步的, 我暂时没有用到这么高版本的Python, 所以就动手造一个轮子. 原理比较简单, 先造一个线程安全的集合, 无非就是Lock+Set, 然后修改PyMySQL的close方法, 把实例对象和我 阅读全文
posted @ 2017-10-01 12:16 egmkang 阅读(1409) 评论(0) 推荐(0) 编辑