自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zyfforlinux

专注linux内核,系统编程,C++服务器端编程,golang ,python/bash脚本编程,DevOps,分布式...

原创 GFS论文笔记

GFS的设计目标 分布式文件系统的共同设计目标: 性能 可伸缩性 可靠性 可用性 GFS根据自己情况重新设计的目标: 组件失效是常态事件,而不是意外事件,因此要有持续的监控、错误侦测、灾难冗余、自动恢复等机制 不能以管理大文件的方式来管理小文件,所以IO操作和Block的尺寸都需要重新考虑 ...

2019-05-30 12:28:35 170 0

翻译 Tip of the Week #74: Delegating and Inheriting Constructors

Tip of the Week #74: Delegating and Inheriting Constructors Originally posted as totw/74 on 2014-04-21 By Bradley White (bww@google.com) “Delegating...

2019-03-07 10:50:01 123 0

原创 Envoy源码分析之ThreadLocal

ThreadLocal整体结构 Envoy中严重依赖ThreadLocal,为了避免加锁Envoy会尽可能在单一线程中完成所有的事件,但是多个线程之间难免会有一些数据需要共享,还有可能需要读写,为了避免加锁Envoy将一些需要在线程之间共享的数据放在ThreadLocal中,当ThreadLoca...

2019-02-01 09:45:23 443 0

原创 Envoy源码分析之Dispatcher

Dispatcher 在Envoy的代码中Dispatcher是随处可见的,可以说在Envoy中有着举足轻重的地位,一个Dispatcher就是一个EventLoop,其承担了任务队列、网络事件处理、定时器、信号处理等核心功能。在Envoy threading model这篇文章所提到的Event...

2018-11-02 10:09:08 410 0

原创 6.824: Distributed Systems 课程讲义3

什么是一致性? 分布式系统中,数据通常会通过复制进行冗余,当应用程序并发访问这些数据的时候,如果保证访问的数据是一致的。如果一个应用程序写入了新的数据,那么之后来访问数据的应用能否看到新增的数据呢? 这就是一致性问题了,通常一致性有几种类型: 弱一致性 读的时候可能会返回老数据,不保证能访问到...

2018-10-29 14:25:26 188 0

翻译 Tip of the Week #65: Putting Things in their Place

Tip of the Week #65: Putting Things in their Place Originally posted as totw/65 on 2013-12-12 By Hyrum Wright (hyrum@hyrumwright.org) “Let me ’splai...

2018-10-21 21:29:55 124 0

翻译 Tip of the Week #64: Raw String Literals

Tip of the Week #64: Raw String Literals Originally published as totw/64 on 2013-12-09 By Titus Winters (titus@google.com) Updated 2017-10-23 Quickl...

2018-10-21 16:20:38 94 0

翻译 Tip of the Week #61: Default Member Initializers

Tip of the Week #61: Default Member Initializers Originally posted as Totw #61 on Nov 12, 2013 by Michael Chastain (mec.desktop@gmail.com) Updated O...

2018-10-21 15:47:33 90 0

翻译 Tip of the Week #59: Joining Tuples

Tip of the Week #59: Joining Tuples Originally published as totw/59 on 2013-10-21 By Greg Miller (jgm@google.com) Updated 2018-01-24 “Now join your ...

2018-10-21 15:14:40 80 0

翻译 Tip of the Week #55: Name Counting and unique_ptr

Tip of the Week #55: Name Counting and unique_ptr Originally published as totw/55 on 2013-09-12 by Titus Winters (titus@google.com) Updated 2017-10-...

2018-10-21 14:23:56 63 0

翻译 Tip of the Week #49: Argument-Dependent Lookup

Tip of the Week #49: Argument-Dependent Lookup Originally posted as totw/49 on 2013-07-14 “…whatever disappearing trail of its legalistic argle-barg...

2018-10-21 10:11:14 69 0

翻译 Tip of the Week #24: Copies, Abbrv

Tip of the Week #24: Copies, Abbrv Originally posted as TotW #24 on Nov 26, 2012 by Titus Winters, (titus@google.com) and Chandler Carruth (chandler...

2018-10-19 16:12:16 99 0

原创 日志采集中的关键技术分析

概述 日志从最初面向人类演变到现在的面向机器发生了巨大的变化。最初的日志主要的消费者是软件工程师,他们通过读取日志来排查问题,如今,大量机器日夜处理日志数据以生成可读性的报告以此来帮助人类做出决策。在这个转变的过程中,日志采集Agent在其中扮演着重要的角色。 作为一个日志采集的Agent简单来看...

2018-10-08 12:43:44 627 1

翻译 Tip of the Week #11: Return Policy

Tip of the Week #11: Return Policy Originally posted as TotW #11 on August 16, 2012 by Paul S. R. Chisholm (p.s.r.chisholm@google.com) Frod...

2018-07-01 15:18:12 179 0

翻译 Tip of the Week #42: Prefer Factory Functions to Initializer Methods

Tip of the Week #42: Prefer Factory Functions to Initializer Methods Originally posted as totw/42 on 2013-05-10 By Geoffrey Romer (gromer@goog...

2018-04-02 22:02:07 202 1

翻译 Tip of the Week #36: New Join API

Tip of the Week #36: New Join API Originally published as totw/36 on 2013-03-21 By Greg Miller (jgm@google.com) Updated 2018-01-24 “I go...

2018-04-02 22:01:17 171 0

翻译 Tip of the Week #10: Splitting Strings, not Hairs

Tip of the Week #10: Splitting Strings, not Hairs Originally published as totw/10 on 2012-08-16 By Greg Miller (jgm@google.com) Updated 201...

2018-04-02 22:00:19 187 0

翻译 Tip of the Week #3: String Concatenation and operator+ vs. StrCat()

Tip of the Week #3: String Concatenation and operator+ vs. StrCat() Originally published as totw/3 on 2012-05-11 Updated 2017-09-18; revised 2...

2018-04-02 21:58:57 154 0

翻译 Tip of the Week #1: string_view

Tip of the Week #1: string_view Originally published as totw/1 on 2012-04-20 By Michael Chastain (mec.desktop@gmail.com) Updated 2017-09-18 W...

2018-04-02 21:48:34 314 0

原创 如何mock系统调用

背景​   Linux下开发存储系统、网络库的时候会用到一系列Linux的系统调用,每一个系统调用都有一些出错的场景,有些场景很极端,比如内存使用达到上限、磁盘写满等,如果对其进行测试的话,很难去构造这样的一个场景,这个时候集成测试就显得力不存心了,只能靠单元测试来覆盖这些场景。现在的问题就是如何...

2017-09-16 18:00:16 863 1

原创 Linux信号专题FAQ

信号: 基本概念可重入、线程安全以及异步信号安全的区别?​   参考可重入、线程安全和异步信号安全,需要强调的是异步信号安全,这个概念知道的人不多,平常大家在编写代码的时候也很少考虑这个因素,也不清楚哪些函数是异步信号安全的,哪些不是,典型的像printf就不是异步信号安全的,内部会加锁,但是平时...

2017-09-13 00:26:11 600 0

原创 关于文件写入的原子性讨论

​   文件的写入是否是原子的?多个线程写入同一个文件是否会写错乱?多个进程写入同一个文件是否会写错乱?想必这些问题多多少少会对我们产生一定的困扰,即使知道结果,很多时候也很难将这其中的原理清晰的表达给提问者,侯捷曾说过,源码面前,了无秘密,那么本文也希望从源代码的角度分析上述问题。在开始之前我们...

2017-08-04 09:19:55 2667 9

原创 工作日记

Git git reset --hard 引入的一个问题 git rebase 压缩提交及其基本原理 git fast forward基本原理 git merge tools p4merge基本介绍 git revert merge commit C++C++11 和 C++14 对于sizeof...

2017-07-21 21:32:18 481 0

原创 C++11 chrono入门

​ C++11引入chrono类来表示时间中的一些概念,以及进行时间相关的计算,这是因为传统使用算术的方式来表示时间间隔和时间点本身这是很模凌两可的。通过使用chrono类库,使用不同的类型来表示不同的时间概念,这有助于通过编译器在编译时来帮助程序员发现一些逻辑错误,为此chrono抽象了如下...

2017-06-17 20:54:18 1403 0

原创 Effective Modern C++笔记汇总

Effective Modern C++ 目录Item 1: Understand template type deduction….待续

2017-06-05 16:09:58 8256 4

原创 Item42 Consider emplacement instead of insertion

​ 如果你有一个容器,存放的是std::string类型,当你通过插入函数(如:insert、push_front、push_back或者是std::forward_list的insert_after)传递一个std::string类型的元素到容器中,逻辑上容器中就会有这个元素了。尽管这可能只...

2017-06-05 14:27:30 1223 0

原创 Item41 Consider pass by value for copyable parameters that are cheap to move and always copied.

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 函数的参数传递方式有很多种,可以是值拷贝、传指针、传引用、甚至是移动。下面这个addName函数就是将外部传入的值存放到其内部的...

2017-05-29 20:37:30 926 0

原创 Item40 Use std::atomic for concurrency, volatile for specific memory

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ volatile关键字在C++中很少被使用,更准确来说是很少被正确使用,它的用途令人很迷惑,甚至这个关键字都不会出现在并...

2017-05-05 22:47:59 1464 0

原创 Item39 Consider void futures for one-shot event communication

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 有的时候对于一个任务来说,希望有一种机制可以和另外一个任务进行通信,尤其是那种异步运行的任务,并且会出现一种特定事件的任务,另...

2017-04-30 20:31:53 1225 0

原创 Item38 Be aware of varying thread handle destructor behavior

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 在Item37中解释过一个状态为joinable的std::thread对象其底层对应一个系统线程。std::future对象和std...

2017-04-29 23:45:19 947 0

原创 程序的机器级表示

2017年4月趁着临近毕业时间比较充裕,就买了一本深入理解计算机系统(第三版),这本书的第二版之前浅浅的读过一遍只对里面的编译与链接章节印象深刻,其他章节对我来说完全陌生,我深知这本书的好,于是重新拾起这本书。为了加深自己的记忆就开始写博客记录自己的读书笔记。 第三章 程序的机器级表示 gcc4....

2017-04-29 09:25:40 904 0

原创 信息的表示与处理

2017年4月趁着临近毕业时间比较充裕,就买了一本深入理解计算机系统(第三版),这本书的第二版之前浅浅的读过一遍只对里面的编译与链接章节印象深刻,其他章节对我来说完全陌生,我深知这本书的好,于是重新拾起这本书。为了加深自己的记忆就开始写博客记录自己的读书笔记。 第二章 信息的表示与处理 如果值x是...

2017-04-16 22:01:32 436 0

原创 Item37 Make std::threads unjoinable on all paths

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 每一个std::thread对象都有两种状态,一个是joinable状态,另外一个则是unjoinable状态。状态是j...

2017-04-15 21:31:15 1046 0

原创 计算机系统漫游

2017年4月趁着临近毕业时间比较充裕,就买了一本深入理解计算机系统(第三版),这本书的第二版之前浅浅的读过一遍只对里面的编译与链接章节印象深刻,其他章节对我来说完全陌生,我深知这本书的好,于是重新拾起这本书。为了加深自己的记忆就开始写博客记录自己的读书笔记。 第一章: 计算机系统漫游 信息就是位...

2017-04-10 16:22:31 588 0

原创 Item36 Specify std::launch::async if asynchronicity is essential

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 当你调用std::async执行一个函数或者是可调用对象的时候,你通常会试图让这个函数异步的执行,但是std::async并...

2017-03-29 17:44:16 897 0

原创 Item35 Prefer task-based programming to thread-based

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ C++11第一次将并发引入到了语言和标准库中,这使得C++程序员们终于可以直接写跨平台的多线程程序了,不用再自己去写不同平台...

2017-03-29 12:08:23 757 0

原创 Item34 Prefer lambdas to std::bind

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ C++11中的std::bind是对C++98中的std::bind1st 和std::bind2nd的改进和继承。而std...

2017-03-27 19:49:15 922 0

原创 Item33 Use decltype on auto&& parameters to std::forward them

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 在C++14中最令人激动的特性当属通用lambda了,通用lambda指的就是使用auto来作为lambda的参数。实现通...

2017-03-27 13:41:57 560 0

原创 C++ Dos and Don'ts

最小化头文件 不要包含不必要的头文件尽量使用前向声明的方式,目的是为了减少编译时间What are forward declarations in C++?,并且在头文件发生改变的时候,减少重新编译的文件。 将内部类移动到实现中 // 内部类的声明 class Whatever { public...

2017-02-16 00:41:19 522 0

原创 Item32 Use Init capture to move objects into closures

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 一些时候Lambda的值拷贝和引用两张捕获模式都没有办法满足你的需要,比如当你有一个可移动的对象,你希望可以将这个对象移动到闭...

2017-02-12 14:34:12 677 0

提示
确定要删除当前文章?
取消 删除