zyfforlinux

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

进程概述和内存分配

进程概述和内存分配 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,...

2016-05-16 11:15:50

阅读数:5612

评论数:0

文件I/O与系统编程

文件IO与系统编程 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,...

2016-05-12 11:33:23

阅读数:4902

评论数:2

可重入、线程安全和异步信号安全

什么是可重入?关于可重入和不可重入这些概念网上可以找到很多,本人表达能力欠佳,所以在此处引用别人的话对这两个概念做一个简单的介绍: 在多线程或有异常控制流的情况下,当某个函数运行到中途时,控制流(也就是当前指令序列)就有可能被打断而去执行另一个函数. 如果在这种情况下不会出现问题,比如说数据或...

2016-03-05 15:30:04

阅读数:575

评论数: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

阅读数:26

评论数: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

阅读数:13

评论数: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

阅读数:11

评论数: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

阅读数:11

评论数: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

阅读数:16

评论数:0

如何mock系统调用

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

2017-09-16 18:00:16

阅读数:250

评论数:1

Linux信号专题FAQ

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

2017-09-13 00:26:11

阅读数:340

评论数:0

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

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

2017-08-04 09:19:55

阅读数:592

评论数:2

工作日记

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

阅读数:292

评论数:0

C++11 chrono入门

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

2017-06-17 20:54:18

阅读数:500

评论数:0

Effective Modern C++笔记汇总

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

2017-06-05 16:09:58

阅读数:2835

评论数:3

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

阅读数:695

评论数: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

阅读数:555

评论数:0

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

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

2017-05-05 22:47:59

阅读数:1088

评论数:0

Item39 Consider void futures for one-shot event communication

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

2017-04-30 20:31:53

阅读数:914

评论数: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

阅读数:677

评论数:0

程序的机器级表示

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

2017-04-29 09:25:40

阅读数:464

评论数:0

信息的表示与处理

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

2017-04-16 22:01:32

阅读数:313

评论数:0

Item37 Make std::threads unjoinable on all paths

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

2017-04-15 21:31:15

阅读数:756

评论数:0

计算机系统漫游

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

2017-04-10 16:22:31

阅读数:433

评论数:0

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

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

2017-03-29 17:44:16

阅读数:598

评论数:0

Item35 Prefer task-based programming to thread-based

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

2017-03-29 12:08:23

阅读数:446

评论数: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

阅读数:526

评论数: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

阅读数:309

评论数:0

C++ Dos and Don'ts

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

2017-02-16 00:41:19

阅读数:413

评论数:0

Item32 Use Init capture to move objects into closures

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

2017-02-12 14:34:12

阅读数:355

评论数:0

Item31 Avoid default capture modes

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ C++11中Lambda表达式给C++带来了很大的改变,通过Lambda可以很方便的创建一个函数对象,这对于C++的开发来说影...

2017-02-12 12:26:34

阅读数:359

评论数:0

Item30 Familiarize yourself with perfect forwarding failure cases

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 在C++11中最为显著的一个新特性,当属完美转发了,是的它很完美,和它的名字一样,转发两字意味着一个函数将其参数传递给另外一个...

2017-02-06 21:57:01

阅读数:340

评论数:0

Item29 Assume that move operations are not present,not cheap,and not used

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 在C++11新增的特性中,移动语义毫无疑问是最为重要的特性,有了这个特性后,对于STL容器的移动操作变的和拷贝一个指针一样高效...

2017-01-16 22:25:18

阅读数:331

评论数:0

Item28 Understand reference collapsing

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 在Item23中详细的介绍了std::move和std::forward的实现原理,并给出了std::move一种典型实现,但...

2017-01-08 22:42:34

阅读数:811

评论数:0

Item27 Familiarize yourself with alternatives to overloading on universal references

   在Item26中对通用引用进行重载的时候会导致各种各样的问题进行了详细的描述,但是这些重载在某些场合下的确很有用,比如构造函数的重载。导致这种问题出现的原因主要是因为重载函数的类型匹配规则(最佳匹配,模版总是能实例化出最match的类型参数,这导致了在类型参数不是完全一致的情况下都会去调用通...

2017-01-08 19:58:07

阅读数:693

评论数:2

Item26 Avoid overloading on universal references

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 在正式进入本文主题之前先来看一段代码,这段代码的目的是纪录下当前的日期和时间,并纪录一下名字到全局的数据结构中,代码如下:st...

2016-12-27 22:44:49

阅读数:673

评论数:0

Item25 Use std::move on rvalue reference, std::forward on universal references

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 右值引用只能绑定到那些可以移动的对象上,如果你有一个右值引用的参数,你应该知道这个参数是用来接收可以移动的对象的。而一个通用引...

2016-12-27 19:44:28

阅读数:629

评论数:0

都是静态函数惹的祸

​ 关于静态函数我相信大家一定不会陌生,在项目中多多少少也会去使用,静态函数的典型应用场景莫过于限制函数的作用域只在本文件中,在我见过的项目中通常开发人员会把一些辅助函数放在头文件中,然后直接包含到项目中,如果不用static修饰会导致函数重定义(这其实很不规范,偷懒的把文件的声明和定义都放到...

2016-12-26 19:26:01

阅读数:315

评论数:0

Item24 Distinguish universal references from rvalues reference

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 刚接触C++11的移动语义的时候,认为T&&就是右值引用,在随后阅读文献的时候发现了另外一个名字,通用引用(u...

2016-12-14 22:15:24

阅读数:417

评论数:0

Item23 Understand std::move and std::forward

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ std::move和std::forward并不像它们的名字那样有用,这两个仅仅是一个模版函数,是在C++11中引入的,辅助移...

2016-12-06 00:22:09

阅读数:496

评论数:0

Item22 When using the Pimpl, define specific member functions in the implementation file

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ Pimpl idiom这个C++的惯用法,我相信很多人都知道,通常为了保护我们的头文件,避免在修改类的数据成员的时候导致依赖这...

2016-11-30 21:43:29

阅读数:470

评论数:3

Item21 Perfer std::make_unique and std::make_shared to direct use of new

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ std::make_shared是在C++11中添加的一个专门用来创建智能指针的方法,而不幸的是std::make_uniqu...

2016-11-28 22:52:55

阅读数:411

评论数:0

6.824: Distributed Systems 课程讲义2

线程 线程是一个服务器构建的基本工具,你将会在很多lab中使用,在分布式系统中可以解决一些棘手的问题,在go中称线程为携程,其它的地方称之为线程。线程允许一个程序做在同一时间做很多事情,这些线程共享内存,每一个线程包含一个独有的状态信息:程序计数器, 寄存器,堆栈 为什么是线程? 使用线...

2016-11-26 21:06:31

阅读数:915

评论数:0

Item20 Use std::weak_ptr for std::shared_ptr like pointers that can dangle

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 原始指针有一个致命的问题就是无法探知生死,尽管你可以通过释放内存后设置为空来解决部分场景下存在的问题,但是这治标不治本,当有多...

2016-11-23 22:37:49

阅读数:379

评论数:0

6.824: Distributed Systems 课程讲义1

什么是分布式系统? 多计算机协作 DNS,P2P的文件共享 大型数据 MapReduce,以及很多的关键性基础架构都是分布式的。 为什么要分布式? 去连接物理上分离的实体 去通过隔离获得安全性 去通过复制来容错 去通过并行的CPU/mem/disk/net来达到横向扩展 但是这很负责, 许多并发的...

2016-11-19 16:38:09

阅读数:645

评论数:0

MapReduce论文笔记

什么是MapReduce? ​ 它是一种编程模型,其思想来自于函数式编程,和Python,Lisp语言中的map和reduce函数类似,其次它也是处理大数据集的一种实现,抽象出一个Map接口和一个Reduce接口,屏蔽底层的基础设施的细节,让使用者可以轻松的编写分布式的应用。 实现...

2016-11-19 15:46:17

阅读数:869

评论数:0

Item19 Use std::shared_ptr for shared-ownership resource management

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 在上一篇文章中讨论了std::unique_ptr,本文讨论的则是另外一个比较重要的智能指针,std::shared_ptr,...

2016-11-16 21:58:48

阅读数:673

评论数:0

Item18 Use std::unique_ptr for exclusive-ownership resource management

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 在这篇文章中我主要探讨下std::unique_ptr这个智能指针,说到智能指针就需要说下它和原始指针的区别了,原始指针很灵活...

2016-11-14 19:42:53

阅读数:516

评论数:0

Item17 Understand special member function generation

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ Effective C++中曾经提到了Rule of Three 意思就是如果你需要声明拷贝构造函数,拷贝赋值操作符和析构函数...

2016-11-09 20:21:41

阅读数:572

评论数:0

Item16 Make const member functions thread safe

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ const(可以用constexpr替换见Item15)成员函数和线程安全是本文的一个核心主题,两者究竟是如何联系在一起的呢?...

2016-10-24 12:45:33

阅读数:806

评论数:0

Item15 Use constexpr whenever possible

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 如果有人问在C++11引入的众多关键字中,有哪个关键字是最让你迷惑的,我会立马回答是constexpr,当这个关键字应用到对象...

2016-10-23 16:11:52

阅读数:600

评论数:0

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