baidu
摘要: 前前后后被坑了两次, 第一次是在老家实体店, 验光非常不专业, 配出来的眼镜戴上去好晕, 后来在上海宝岛眼镜专门做了验光, 当时花了50快还是多少块忘了, 然后照着宝岛开的那个药方配镜, 才好了. 这次在深圳也是实体店, 验光也是很不专业, 配出来的眼镜右眼感觉有一点问题. 我主要用右眼看, 但是右 阅读全文
posted @ 2023-05-02 03:08 egmkang 阅读(223) 评论(1) 推荐(1) 编辑
摘要: 公司的pyc做了加密, 前段时间研究了一下怎么解密. 最开始的思路是反汇编pypy的dll, 找到import代码的实现, 然后写一个解码的函数. 但是对反编译的东西不熟悉, 想要找到解密的地方比较困难. 最后放弃了这个思路. 后面看到了一篇pyc文件格式的文章, 得知pyc文件其实就是文件头+ma 阅读全文
posted @ 2022-11-04 12:14 egmkang 阅读(1026) 评论(0) 推荐(0) 编辑
摘要: 受限于当时的基础设施, 只能做到这样的程度: C# Protobuf如何做到0分配内存的序列化 但是Protobuf 3.13开始提供对Span的支持, 就意味着可以真正做到0分配内存, 对GC非常友好: Add ParseFrom(ReadOnlySequence<byte>) method to 阅读全文
posted @ 2020-12-22 11:13 egmkang 阅读(895) 评论(0) 推荐(0) 编辑
摘要: 586之前的CPU, 会通过LOCK锁总线的形式来实现原子操作. 686开始则提供了存储一致性(Cache coherence), 这是多处理的基础, 也是原子操作的基础. 1. 存储的粒度 存储的组织形式(粒度)是以CacheLine为单位的, 通常为64字节甚至更高(早期也有32字节的). 然后 阅读全文
posted @ 2020-12-04 10:10 egmkang 阅读(2655) 评论(0) 推荐(0) 编辑
摘要: 首先, 这个Flash不是我们在浏览器用的Flash这种技术, 而是: 动作缓慢, 车速极快 闪电(Flash). 18年的某一个周末, 即兴用Python写了一个Virtual Actor模式的demo, 起了一个名字叫Flash, 是因为速度快如闪电 做framework快, 通过framewo 阅读全文
posted @ 2020-11-30 10:08 egmkang 阅读(668) 评论(0) 推荐(0) 编辑
摘要: 若干年前写了一篇<<浦发银行的价值投资>>, 中心思想实际上非常简单, 就是假设ROE不变, 然后估算内在价值. 单纯从ROE的角度来看, 估算不是很离谱, 毕竟现在已经快2021年了. 当时的估算用ROE 15%去做预测, ROE虽然是一路向下到2019年12%, 实际上变化不算是非常大. 但是P 阅读全文
posted @ 2020-11-29 18:26 egmkang 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 通用的CP系统有etcd和consul, 通用的对立面就是专用系统. 所以在某些场合是有这种需求的. 然而etcd embed的可用性极差, Windows上面跑会出现各种问题, 而且不能定制协议, 你必须得用etcd定义好的协议和客户端来和etcd集群通讯. 所以这时候的选择: 1. 忍着 2. 阅读全文
posted @ 2020-11-28 15:08 egmkang 阅读(830) 评论(2) 推荐(0) 编辑
摘要: Dapr是为云上环境设计的跨语言, 事件驱动, 可以便捷的构建微服务的系统. balabala一堆, 有兴趣的小伙伴可以去了解一下. Dapr提供有状态和无状态的微服务. 大部分人都是做无状态服务(微服务)的, 只是某些领域无状态并不好使, 因为开销实在是太大了; 有状态服务有固定的场景, 就是要求 阅读全文
posted @ 2020-11-05 21:57 egmkang 阅读(2254) 评论(0) 推荐(1) 编辑
摘要: 优化C#服务器的思路和工具的使用 优化服务器之前, 需要先对问题的规模做合理的预估, 然后对关键的数据做采样, 做对比, 看和自己的预估是否一致, 误差大在什么地方, 是预估的不对, 还是系统实现有问题. 策划对某游戏服务器的要求是3000到5000人在线. 大概的估算 玩了玩游戏, 在前期任务的流 阅读全文
posted @ 2020-09-16 10:28 egmkang 阅读(1075) 评论(0) 推荐(8) 编辑
摘要: 通过P/Invoke加速C#程序 任何语言都会提供FFI机制(Foreign Function Interface, 叫法不太一样), 大多数的FFI机制是和C API. C#提供了P/Invoke来和操作系统, 第三方扩展进行交互. FFI通常用来和老的代码交互, 例如有大量的遗留代码, 重写成本 阅读全文
posted @ 2020-09-15 10:02 egmkang 阅读(1239) 评论(1) 推荐(8) 编辑
摘要: C# Alloc Free编程之实践 上一篇说了Alloc Free编程的基本理论. 这篇文章就说怎么具体做实践. 常识 之所以说是常识, 那是因为我们在学任何一门语言的时候, 都能在各种书上看到各种各样的best practice. 这些内容也确实是最佳实践, 需要去遵守. 但是现实代码里面看到, 阅读全文
posted @ 2020-09-14 09:47 egmkang 阅读(781) 评论(7) 推荐(11) 编辑
摘要: C# Alloc Free编程 首先Alloc Free这个词是我自创的, 来源于Lock Free. Lock Free是说通过原子操作来避免锁的使用, 从而来提高并行程序的性能; 与Lock Free类似, Alloc Free是说通过减少内存分配, 从而提高托管内存语言的性能. 基础理论 对于 阅读全文
posted @ 2020-09-11 12:35 egmkang 阅读(3381) 评论(16) 推荐(19) 编辑
摘要: C#多线程逻辑编程 多线程编程以难著称, 有很多人碰见多线程编程就会畏缩, 不敢前进, 言必称死锁/卡死. 但是合理编程是不会碰到死锁这种问题. 对语言了解 工欲善其事必先利其器, 必须要对语言提供的同步机制和期扩展有所了解. Linux系统(库)提供的同步机制有: 锁 原子操作 条件变量 其中原子 阅读全文
posted @ 2020-09-10 10:08 egmkang 阅读(725) 评论(0) 推荐(2) 编辑
摘要: 网络框架的选择 C++语言里面有asio和libuv等网络库, 可以方便的进行各种高效编程. 但是C#里面, 情况不太一样, C#自带的网络API有多种. 例如: Socket TcpStream(同步接口和BeginXXX异步接口) TcpStream Async/Await Pipeline I 阅读全文
posted @ 2020-09-09 11:23 egmkang 阅读(2442) 评论(5) 推荐(6) 编辑
摘要: 估计很多人在网上看到各种各样的DeepClone实现, 例如: 1. 通过BinaryFormatter进行二进制序列化 这玩意儿序列化出来的东西还带namespace类型, 尺寸非常大, 调试一下就知道极其不靠谱 有些人又开始动歪脑筋了, 说我搞一个JSON序列化, 或者BSON序列化可不可以 2 阅读全文
posted @ 2020-04-13 23:30 egmkang 阅读(1562) 评论(7) 推荐(1) 编辑
摘要: 题目很简单, 就是IMessage对象怎么变成Byte[] 答案1: msg.ToByteArray() 这肯定不符合我们的要求 答案2: using var memoryStream = new MemoryStream(); using var codedOutputStream = new C 阅读全文
posted @ 2020-04-04 23:43 egmkang 阅读(1456) 评论(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 阅读(3054) 评论(1) 推荐(0) 编辑
摘要: 长链接发送request/response时, 绝大部分包都是小包, 而每个小包都要消耗一个IP包, 成本大约是20-30us, 普通千兆网卡的pps大约是60Wpps, 所以想要提高长链接密集IO的应用性能, 需要做包的合并, 也称为了scatter/gather io或者vector io. 在 阅读全文
posted @ 2020-02-12 15:52 egmkang 阅读(2420) 评论(0) 推荐(3) 编辑
摘要: 网上的教程大都是手动通过protoc编译, 比较难用 给当前工程添加"Google.Protobuf"和"Grpc.Tools"的引用(通过nuget), 然后添加proto文件, 编辑.csproj文件 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGrou 阅读全文
posted @ 2020-02-04 01:35 egmkang 阅读(941) 评论(0) 推荐(1) 编辑
摘要: 服务器内经常会有一些多读少写的场景, 具体问题需要分析一下, 如果是这种场景, 这边提供一个思路来降低多线程程序锁的冲突, 进而极大的提升程序的性能. 例如一个Dictionary<String, String> A, 需要多读少写, 不会很频繁的写, 而且不会修改Value值, 那么可以构造一个A 阅读全文
posted @ 2020-01-28 16:39 egmkang 阅读(590) 评论(0) 推荐(0) 编辑