Masutangu

也許我這一生 始終在追逐那顆九號球

浅读 Libco

今天花了一天时间,学习了下微信的开源协程库 libco的代码,写下来做个纪录,有部分细节代码(包括 coctx_swap.S 那段汇编)我还没读懂,以后再补充进来。 协程的原理 协程的概念和优点这里不再赘述。我们先介绍下实现协程的原理,再来看看相应的代码。 协程的切换,其实就是由我们手动来管理指令执行的上下文。一般每一个协程有自己的 context_buff 来保存自己的运行上下文(寄存...

Protobuf 编码原理

最近项目组有在用 protobuf,于是抽空读了些 protobuf 的相关资料。本文总结 protobuf 的编码原理,重点在于其如何实现版本兼容。文中样例及说明都参考了 protobuf 的官方文档。 编码方法的介绍 要了解 protobuf 的编码方式,首先介绍下 Varint 和 ZigZag 这两种编码。 Varint Varint 编码的优势在于值越小的数字,占用的字节更少。...

简单异步应用框架的实现

两年前刚进公司的时候,第一次接触了异步框架,那时还处于懵懵懂懂的状态。最近换了组,接触到另外一种实现的异步框架,这次有了一定的积累后,对异步框架的设计也有了更多的理解。刚好最近自己基于 libuv 造了个简单的轮子 saf (Simple Async Framework),趁此机会和大家聊聊异步框架的设计思想和实现。 异步框架设计思想 服务器模型 先来看看传统的服务器模型,如下图: ...

工作两年记

转眼间,我也已经工作了快两年了。两年,在互联网行业,是一个尴尬的时间点。一方面,你不再是一个新人,意味着你的潜力已经渐渐被挖掘得差不多了。另一方面,你又还没完全成长,你会承担一些责任,但也许还没办法掌控全局,做到游刃有余。 回想起刚入职,由于自己完全没有工程经验,心里相当忐忑。机缘巧合,leader 给我分配的第一个任务是爬虫。Python 对于新手来说相当的友好,我很快就上手并能够做出一...

Elric 使用手册

这篇文章正式介绍下我之前用 Python 实现的分布式任务框架 Elric,包括其API,架构,周边能力以及实现细节。 读者可以先阅读之前的这篇文章《Python实现的分布式任务调度系统》来了解Elric的起源和早期设计的思想。 一. 简介 Elric 是一个 Python 实现的简单的分布式任务框架。Master-Worker 架构,Worker 向 Master 提交任务和执行 Ma...

Python 笔记

这篇文章整理了python相关的资料,包括性能优化、常见错误和高级用法。 注:本文内容整理自网上博客,《Python Cookbook》等,非原创。 性能优化 1. 字典和列表 Python 字典中使用了 hash table,因此查找操作的复杂度为 O(1),而 list 实际是个数组,在 list 中,查找需要遍历整个 list,其复杂度为 O(n),因此对成员的查找访问等操作字典...

Matplotlib 笔记

最近工作需要在邮件内容中展示一些图表,例如折线图、柱状图、圆饼图等。采用的方案为: 用Matplotlib生成图表并保存成文件 将图片添加为邮件的附件 最后通过src="cid:0"的方式将图片嵌入到邮件正文中 这篇文章主要对 Matplotlib 的使用做些总结,包括 Matplotlib 如何配置显示中文字体,折线图/柱状图/圆饼图相关介绍,matplot子图的概念。...

Tcpcopy 源码阅读

tcpcopy是网易开源的一款压测工具,可以实时复制线上流量到测试环境,从而利用线上真实的用户流量来对测试环境进行仿真压测。 由于网上关于tcpcopy的介绍并不多,我对tcpcopy的原理也很感兴趣。因此在学习其源码后写下这篇文章和大家分享。这里非常感谢tcpcopy的作者王斌老师的热心指导。 架构 第一种架构: 实现原理: 从数据链路层捕获客户端的请求包,...

iOS 初体验

客户端对做后端的我来说,一直是黑盒子般。自从换了Mac,就寻思着什么时候学习学习iOS开发。这几个月断断续续花了时间,先是看了Stanford的cs193p课程,后来又读了<iOS Programming The Big Nerd Ranch Guide>,最后写了个非常简单的App:ToDo。今天这里分享下iOS一些学习笔记,素材取自cs193p的ppt,apple的开发者文档...

Python 进程池的坑:Pickling Error!

前阵子在跑Elric下的爬虫任务时,发现了worker进程有偶现的异常挂起的现象,通过strace看到worker进程block在futex(…, FUTEX_WAIT,…)这里,查看了worker的标准输出,发现打印了这么一行东西: 1 File “../multiprocessing/queues.py”, line 266, in _feed send(obj) PickingErr...