qqwx

导航

#

[置顶] 分布式入门之5:paxos

摘要: paxos是去中心化协议。目的是在没有中心节点统筹的情况下,通过约定的算法推进流程,使所有节点达到一个一致的状态(批准某个值) proposer, accepter是其中的主要角色。前者发起投票,后者批准投票。 核心思想是,一旦超过半数的accepter同意某个投票,整个流程结束,批准的那个结果则是 阅读全文

posted @ 2016-05-24 23:52 qqwx 阅读(680) 评论(0) 推荐(0) 编辑

2017年4月3日 #

垃圾回收算法(6)三色标记

摘要: GC目前的问题是,会暂停、阻碍代码的运行,即stop the world。增量式GC处理的就是这个问题。将GC变得可一阶段一阶段进行。 分阶段运行的思路并不难,但具体要解决的问题其实是分阶段GC后,如何保证下次继续时,中断过程中引用关系的变化不会对GC造成影响。 三色标记法是一个逻辑上的抽象,将对象 阅读全文

posted @ 2017-04-03 11:48 qqwx 阅读(8604) 评论(0) 推荐(2) 编辑

2017年4月2日 #

垃圾回收算法(5)分代回收

摘要: 分代垃圾回收,基于的是“大部分的对象,在生成后马上就会变成垃圾”这一经验上的事实为设计出发点。此前讨论过基于引事实的另一个垃圾回收算法,引用计数出的一些优化思路。 分代的关键是: 分代垃圾回收的典型是Ungar的分代垃圾回收。 它将堆分成如下形式: 如上,分成新生代与老年代。 在新生代内,又分成了生 阅读全文

posted @ 2017-04-02 21:10 qqwx 阅读(2147) 评论(0) 推荐(3) 编辑

golang的http分析

摘要: 首先,要认识一个贯穿始终的接口http.Handler type Handler interface { ServeHTTP(ResponseWriter, *Request) } 其中,两个参数,一个是表示响应的接口,另一个表示请求。具体方法先忽略: type ResponseWriter int 阅读全文

posted @ 2017-04-02 00:02 qqwx 阅读(2522) 评论(0) 推荐(0) 编辑

2017年4月1日 #

垃圾回收算法(4)标记整理

摘要: 标记-压缩(整理)算法 鉴于复制算法中,没有内存碎片的方式能大大提高分配效率,因此,在mark_sweep的基础上,也可以改良出mark_compact算法,使得空闲空间连续。同时又没有复制算法的无帮吃一半堆的问题。 首先是最简单的算法,叫Lisp2算法。 在标记阶段,不变,仍然是对每个活动对象打上 阅读全文

posted @ 2017-04-01 00:41 qqwx 阅读(1457) 评论(0) 推荐(1) 编辑

2017年3月30日 #

垃圾回收算法(3)复制

摘要: 垃圾回收复制算法的基本思想很直观,甚至看上去浪费。将现有堆一分为二,一个用完后,将活动对象拷贝到另一半。但是这样做却有一些比较明显的优点。 先来看下具体算法。 看上去简单,其实还是有一些要注意的地方。 第一是防止重复拷贝,对象之间的引用可以很复杂,各种交叉;第二是拷贝后,新老堆中的引用关系要缕顺。 阅读全文

posted @ 2017-03-30 00:20 qqwx 阅读(1231) 评论(0) 推荐(0) 编辑

2017年3月27日 #

垃圾回收算法(2)引用计数

摘要: 引用计数: 引用计数于1960年被提出。思想是在对象中增加一个“被多少个外部对象引用”的字段。当没有外部引用时,字段自然为0,说明是垃圾了。 对象的分配延续前文,以free_list管理。 它与上文的mark_sweep区别在于,gc并非显式调用,而是伴随着对象的分配与覆盖(pa = pb,即pa原 阅读全文

posted @ 2017-03-27 23:41 qqwx 阅读(1001) 评论(0) 推荐(1) 编辑

2017年3月25日 #

垃圾回收算法(1)标记-清除

摘要: mark-sweep,标记-清除算法,问世已有半个世纪,是经典的垃圾回收算法。它的思想是把过程分两步,第一步找到内存中所有的活动对象,并标记(mark)出来;第二步是遍历整个堆,将第一步未mark的对象内存回收入堆。 即: mark_sweep() { mark() sweep() } 要注意的一点 阅读全文

posted @ 2017-03-25 01:23 qqwx 阅读(949) 评论(0) 推荐(1) 编辑

2017年1月19日 #

golang的interface剖析

摘要: 背景: golang的interface是一种satisfied式的。A类只要实现了IA interface定义的方法,A就satisfied了接口IA。更抽象一层,如果某些设计上需要一些更抽象的共性,比如print各类型,这时需要使用reflect机制,reflect实质上就是将interface 阅读全文

posted @ 2017-01-19 00:45 qqwx 阅读(3208) 评论(0) 推荐(1) 编辑

2017年1月17日 #

库文件的使用

摘要: 背景: 初学者经常搞不清楚,一个main.cpp文件,调用了某库(可能静态也可动态)中的函数,如何将它跑起来。 编译: 缺少头文件,加上再编译(编译只与头文件有关,不需要关注库): g++ -c main.cpp -I/home/ww/2.src/leveldb/include OK,生成main. 阅读全文

posted @ 2017-01-17 01:26 qqwx 阅读(1042) 评论(0) 推荐(0) 编辑

2017年1月10日 #

linux loadavg详解(top cpu load)

摘要: 目录 [隐藏] 目录 1 Loadavg分析 1.1 Loadavg浅述 1.2 Loadavg读取 1.3 Loadavg和进程之间的关系 1.4 Loadavg采样 2 18内核计算loadavg存在的问题 2.1 xtime_lock解析 2.2 全局load读写分离解xtime_lock问题 阅读全文

posted @ 2017-01-10 00:46 qqwx 阅读(16904) 评论(0) 推荐(0) 编辑