Masutangu

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

Linux 内核系列-进程调度

本系列文章为阅读《现代操作系统》《UNIX 环境高级编程》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 许多适用于进程调度的处理方法同样适用于线程调度。当内核管理线程的时候,调度经常是按照线程级别的,与线程所属的进程基本没有关联。 调度需要考虑 CPU 的利用率,因为进程切换的代价比较高,进程需要从用户态切...

Linux 内核系列-进程通信和同步

本系列文章为阅读《现代操作系统》《UNIX 环境高级编程》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 竞争条件 多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时许,称为竞争条件。 忙等待的互斥 几种实现互斥的方案: 屏蔽中断 1 在单处理器系统中,最简单的方法是使每...

Linux 内核系列-进程

本系列文章为阅读《现代操作系统》《UNIX 环境高级编程》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 进程即处于运行中的程序,除了程序的代码外,还包括打开的文件、挂起的信号、进程状态、内存地址空间以及用以存储全局变量的数据段等。 执行线程,简称线程,是在进程中活动的对象。每个线程都拥有独立的程序计数器、进...

Libuv 源码阅读

花了几天时间读了下 libuv 的源码,整理成这篇文章。<a href = #section_1>第一节</a>是读官方教程做的笔记,主要是供自己备忘用,读者可以跳过。<a href = #section_2>第二节</a>解读 libuv 的源码,重点在 libuv 队列的实现和如何用线程池实现异步文件 IO。 概念 handles 和 ...

浅读 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),因此对成员的查找访问等操作字典...