JumpConsistentHash,一种快速、简单、内存占用最少的一致性hash算法 JumpConsistentHash提出了一种崭新的思路来解决这类问题,如果理解了原理那很容易看出想要增加或者删除node需要在末尾进行操作,这是和传统的实现不一样的地方。但笔者认为这个不是什么很大的缺点,它优秀的复杂度和实现完全可以覆盖掉这个缺点。笔者最近刚好要搭一套分布式缓存服务,最后直接拿这个上手非常好用。如果还想了解更多细节,比如benchmark之类的建议看原文。
如何使用cpu SIMD指令集优化代码 首先看机器支持指令集。linux:cat /proc/cpuinfo |grep flagscat /proc/cpuinfo |grep flags对于向量操作,主要是以下三种指令集,MMX,SSE,AVX,按时间排序。使用内置函数。gcc编译g++ -o test test.cc -mavx2 --std=c++11部分指令需要内存地址对齐才行,我们默认都对齐32位avx......
Lua在直播特征平台中的一次实践 本人今年年初开始换了一份工作,然后这一年来都在适应着工作节奏,比较累,放假的时候提不下心去学习。等今年工作告一段落后,明年就算工作节奏如此我也要逼迫自己把之前预定的东西给看完,这篇文章就是今年的唯一贡献了。1.什么是特征平台在推荐系统的场景里大致可分为召回-粗排-精排-混排这4个阶段,这四个阶段我们都需要通过user和feed的特征去做不同的策略。其中在混排这个阶段对工程同学的负担尤为严重,混排需要决定哪些feed先出,还有最经典的两种操作:打散和强插。此时若工程同学一一去实现算法同学的策略是不现实
Raft论文简述 目的根据论文的实现来看,我认为Raft和Paxos这些一致性算法是为了解决分布式里状态机同步的问题。最典型的应用分布式里的容错,你的所有server都需要有备份,如果是有带状态的server,那么master和secondary之间的数据如何保持一致性就是一个难题,而这些算法就是为了解决这个问题的。前言这里稍微提一下,一般来说同步状态机,有以下两种方案。1.State Machine。将完整的状态同步。2.Replicated Machine。假设没有外因的情况下,对一样的状态机输.
Google File System总结 此文章完全基于作者本人对论文的理解,可能会哪里理解得不到位,仅供参考。目的GFS诞生是为了如何设计一个高效的顺序读写的分布式文件系统。需要解决的问题需要解决的问题都是分布式要解决的惯例了。性能,容错,复制和一致性。性能利用复数台机器的资源来完成工作,性能就可以有显著提高。所以自然就会想到把数据分片,分成复数片段后分布在不同的机子上,就可以做到同时从不同的机子上读取数据了。容错但是一旦你同时运行了成百上千台机器,那么就会将本来很小的错误给放大,本来概率很低的错误就可..
MIT6.824 Lab 1: MapReduce mit的分布式实验。第一个实验就是实现google MapReduce论文的简单版本,基于课程要求,我的代码就不公开了(本身也不会go,边写边查资料的,临时磨枪上阵,代码写得太烂)。直接我的思路。流程分为两个部分,master和worker。master:3个协程,(注意go的协程是可以在不同的线程的,所以写共享数据的时候要上锁)1.RPC服务器。提供两个rpc接口GetTask和markTaskFinish,用于获取任务和标记任务完成。2.任务状态检查,检查所有任务是否完.
CS:APP malloc lab 记录 Introduction在本lab中,您将为C程序编写一个动态存储分配器,即您自己的malloc,free和realloc例程版本。 鼓励您创造性地探索设计空间并实现正确,高效和快速的分配器。 How to Work on the Lab您的动态存储分配器将包含以下四个函数,这些函数在mm.h中声明,并在mm.c中定义。我们为您提供的mm.c文件实现了我们可以想到的最简单但仍在功能上正确的malloc程序包。 以此为起点,修改这些函数(并可能定义其他私有静态函数),以使它们遵循...
CS:APP shell lab 记录 Introduction任务目的是使您更加熟悉过程控制和信号通知的概念。 为此,您需要编写一个简单的Unix Shell程序来支持作业控制。Hand Out Instructions首先将文件shlab-handout.tar复制到计划在其中进行保护的受保护目录(实验室目录)。 然后执行以下操作:1.输入命令tar xvf shlab-handout.tar展开tarfile。2.输入命令make进行编译并链接一些测试例程查看tsh.c(tiny shell)文件,您将看..
毕业一年,回顾一下自己与刚毕业的变化 总结不知不觉已经过了一年,对比了一下去年,感觉应该稍微比之前强了辣么一丢丢?(大概吧)。出来工作才知道,在学校是多么舒服,现在工作每天基本都在拧螺丝,平时想学点什么只能尽快地把自己的业务需求搞完弄出点时间出来看看别的东西。我后悔我在大学本科的时候没有把基础学得更扎实。现在毕业了,我越是看基础,越是觉得我当初有多无知。。。根本是个无底洞。我时常在想我读个研究生会怎样,经过多次思考得出结论是:跟现在可能不会有太大区别,只是出来找工作可能会好找一点。果然有一些事是失去了才知道珍惜,希望自己今后能坚持学习吧
MIT6.828-OS lab5:Spawn and Shell 记录 Introduction在这次lab中,您将实现spawn,这是一个加载和运行磁盘可执行文件的库调用。 然后,您将充实kernel和库操作系统,以在控制台上运行Shell。Getting Started照以往的lab一样,创建分支,然后merge。本部分lab的主要新组件是文件系统环境,位于新的fs目录中。 扫描此目录中的所有文件,以了解所有新内容。 另外,在user和lib目录中还有一些与文件系统相关的新的源文件。合并新的lab5代码后,您应该再次运行lab4的pingpong,p
CS:APP cachelab 记录 Overview本lab将帮助您了解缓存对C程序性能的影响。 lab由两部分组成。 在第一部分中,您将编写一个小的C程序(大约200-300行),该程序模拟高速缓存的行为。 在第二部分中,您将优化一个小型矩阵转置函数,其目标是最大程度地减少高速缓存未命中的次数。Reference Trace Files讲义目录的traces子目录包含参考跟踪文件的集合,我们将使用它们来评估您在A部分中编写的缓存模拟器的正确性。跟踪文件由名为valgrind的Linux程序生成。 例如,输入在命令行.
MIT6.828-OS lab4:Preemptive Multitasking 记录 Introduction在这个lab,您将在多个同时活动的用户态environment中实现抢占式多任务处理。在partA中,您将为JOS添加多处理器支持,实现循环调度,并添加基本的environment管理系统调用(创建和销毁environment以及分配/映射内存的调用)。在partB中,您将实现一个类似Unix的fork(),它允许用户态environment创建其自身的副本。...
CS:APP archlab 记录 Introduction在本lab中,您将学习流水线Y86处理器的设计和实现,同时优化它和基准程序以最大化性能。 允许您保留对基准程序的任何语义转换,或者对流水线处理器进行增强,或者两者。 完成lab后,您将对影响程序性能的代码和硬件之间的交互的理解有很大的提升。 lab分为三个part,每个part都有自己的练习。 在part A中,您将编写一些简单的Y86程序并熟悉Y86工具。 在part...
MIT6.828-OS lab3:User Environments 记录 Introduction在本实验中,您将实现运行受保护的用户模式环境environment(即“进程process”)所需的基本内核功能。您将增强JOS内核,以设置数据结构来跟踪用户环境,创建单个用户环境,将程序映像加载到其中并开始运行。您还将使JOS内核能够处理用户环境发出的任何系统调用,并处理它引起的任何其他异常。Note:在本实验中,environment和process这两个术语是...
CS:APP buflab 记录 Introduction这项任务将帮助您对IA-32调用约定和堆栈组织有详细的了解。 它涉及对lab目录中的可执行文件bufbomb施加一系列缓冲区溢出攻击。Logistics像往常一样,这是一个单独的项目。我们使用gcc的-m32标志生成了实验,因此,即使主机是x86-64系统,编译器生成的所有代码也都遵循IA-32规则。 这足以使您确信编译器可以使用所需的任何调用约定,只要它...
MIT6.828-OS lab2:Memory Management 记录 这一章主要讲内存分配。introduction在这个实验中,你将会为你的操作系统写内存管理代码。内存管理有两个部件。为了kernel能够分配并且释放内存,第一个部件是kernel的物理内存分配器allocator。你的allocator将以4096B为操作单位,称为页。您的任务将是维护数据结构,该数据结构记录哪些物理页是空闲的,哪些是已分配的,以及多少进程正在共享每个分配的页。 ...
CS:APP bomblab 记录 任务就是把bomb这个可执行文件里的炸弹拆掉,他有6组数据,你需要输入6次来拆除这个炸弹。简化流程你可以新建一个文件叫psol.txt,然后通过下面的执行命令./bomb psol.txt即可把psol.txt里的数字自动输入到bomb里。理论上直接重定向输入流<也是可以的吧。Hint1.学会用gdb。2.objdump -t可以打印可执行文件的符号表...
CS:APP datalab 记录 CS:APP这本书真的可以说是计算机的内容 给你从头讲到尾了,虽然每个领域方面的深度不够,但是已经足够了,因为每一个领域都不是这么简单就能够说完的,这本书能把这么多东西讲得很清楚真的不容易,所以看完建议挑战一下lab。要求:不允许使用条件语句和循环语句,只允许使用8个运算符:! ˜ & ˆ | + >来完成,某些题目会额外限制运算符数量,最大只能使用8位整数。...