7 self-motivation

尚未进行身份认证

专注LINUX开发

等级
TA的排名 3k+

怎么使用CONTEXT

http://www.anger6.com/?p=1903简介context库是go1.7中加入的,本篇文章主要是讲解如何正确的使用它。缘起一切有为法,让我们先来看看golang里加入context的缘由。在一个go实现的服务器程序中,通常我们对每个请求使用一个goroutine来进行处理。在请求处理里,我们还有可能启动新的goroutine来访问一些后台程序,如进行数...

2019-08-18 21:56:49

anger6网站地图

不断提高自身修养,还有很多要补充的知识。http://www.anger6.com/?p=1893操作系统互斥技术SMP缓存一致性文件系统计算机网络epollhttp2设计模式常见设计模式系统架构c10kreactor模式gRPC数据结构与算法leetcode正则匹配回文GoGo调度器实现...

2019-08-16 21:36:32

Go语言调度器实现(二)----go scheduler

简介在上一篇文章里,我介绍了OS调度方面的相关内容,我认为这些内容对理解Go调度器的语义很重要。本篇文章,我将从语义层面会介绍GO调度器是如何工作的,将会重点关注G调度器的高层行为。Go调度器是一个复杂的系统,小的细节是不重要的。重要的是我们要有一个对Go调度器如何工作和其调度行为的好的认知模型。这些有助于我们做出工程上的决策。启动你的程序当你的Go程序开始运...

2019-08-11 21:24:46

go语言调度器实现(一)---os调度

go语言最大的卖点在于并发编程,尤其是现在免费的午餐已经结束,这意味着要挖掘硬件的高性能,软件越来越重要.而易于编写并发程序的go语言,调度器的实现是一关键因素.因此本系列文章希望探索go语言的调度器实现.将分3篇文章进行讲述,分别是OS调度器,GO调度器以及如何进行并发编程.介绍Go调度器的设计和行为能够让Go多线程程序的编写更加高效和具有更高的性能。这要得益...

2019-08-11 21:22:46

GIT对象

http://www.anger6.com/?p=1751git是linus开发的一款版本控制工具,大神的作品果然不同凡响,git正在变得越来越流行。在使用的过程中,也感觉到其易用和高效。因此想要探究一下其内部的原理。git的高效得益于其存储系统的实现,它是一个内容寻址的文件系统。git的核心是一个键值数据库,你可以向这个数据库中插入任意类型的内容,它会返回一个键值作为唯一标识,...

2019-08-07 22:52:10

docker镜像存储实现

为什么要写这篇文章?网上已经有很多讲docker镜像存储原理的文章了,这篇文章还有必要吗?网上关于docker镜像的文章大都偏原理,像什么镜像是分层的,是只读的,容器除了镜像的只读层还有自己的可写层等等。这些原理说出来大家好像都懂,但好像什么也没学到。因此我写了这篇偏实现的文章,讲述docker是如何利用联合文件系统存储容器镜像,以及如何建立容器的文件系统。学习这篇文章之后,你将能够:...

2019-08-05 22:13:00

linux epoll实现分析

epoll的作用是进行I/O的多路复用,可以同时监听多个fd产生的事件。常结合异步处理实现单线程的高并发。在多核环境中,可以结合多线程实现负载分担。本文主要分析一下linuxepoll的实现。APIepoll_create(intsize);.epoll_create1(intflags);创建一个epoll实例,并返回与之关联的一个fd.这是后面我们继续使用epoll其...

2019-07-27 23:18:07

gRPC当前epoll实现的问题和解决方案

gRPC当前的epoll实现并不十分高效,有很大的改进空间。这篇文章来分析一下。`epoll`是gRPC实现pollset的基础。因此,你有必要先了解一下epoll即其发展史(至少了解EPOLLEXCLUSIVE是干什么的吧?)如果文章中的内容不能理解,建议先看下我之前讲gRPC的相关文章。介绍当前gRPC中`epoll`的实现.整体架构图:一个gRPC客户端或者...

2019-07-24 23:55:05

理解Reactor模式: 基于线程和事件驱动

在web服务器开发中,有2种常见的架构:基于线程的架构和事件驱动的架构。基于线程的架构最初多线程server的实现一般都是采用每个连接一个线程的方法。这对于那些需要兼容非线程安全库的站点比较合适。也有使用多进程模型来隔离每个请求,这样单个请求出问题不会影响到其它请求。进程太重,上下文切换很慢而且内存消耗很大。因此,为了更好的扩展性,每个请求一个线程的方式更为常用。尽管多线程程...

2019-07-23 20:39:31

C10K问题

http://www.anger6.com/?p=1350问题C10K是探讨如何优化sockets处理以便能够同时处理大量客户请求的问题。C10K就是指的并发处理10K个连接。注意,这里的并发连接和qps的概念是不同的,尽管它们有些相似。qps需要很高的吞吐量(能够很快地处理请求),而大量的并发连接需要高效的连接调度和管理。换句话说,高qps要求的是处理请求的速度,而同时处理...

2019-07-21 20:57:52

设计模式总结(一)

http://www.anger6.com/?p=1317对各种设计模式的一些思考和总结。“生成实例”类单例模式”Singleton”从名字也很容易理解,只有一个实例。原理通过单例模式,我们通常想实现以下效果:确保任何情况下绝对只有1个实例想在程序上表现出“只存在一个实例”对于不同的编程语言实现“单例模式”的方式也有所不同。对于JAVA,C++这种语言,通常将...

2019-07-20 22:07:32

跳表---实现有序集合

http://www.anger6.com/?p=1267跳表的基础是链表,它是对有序链表的改进。主要改进有序链表的查找效率。我们知道对于有序的数组,通过二分查找法能够实现O(logn)的查找效率,而对于链表来说,由于其存储空间不是连续的,无法进行随机访问,因此查找效率是O(n).那么链表有没有办法实现和数组一样的查找效率呢?答案就是使用跳表。跳表在redis中有使用,用于...

2019-07-20 15:26:11

必须会的SUPER

http://www.anger6.com/?p=1006函数原型如下:super([type[,object-or-type]])super函数返回一个代理对象,用于调用type的父类或兄弟类中的方法。talkischeap.先来看调用父类中的方法classB:defmethod(self):print('methoin...

2019-07-12 22:35:39

LINUX互斥技术

http://www.anger6.com/?p=709在内核中,可能出现多个进程(通过系统调用进入内核模式)访问同一个对象,进程和硬中断访问同一个对象,进程和软中断访问同一个对象,多个处理访问同一个对象,此时需要使用互斥技术,确保在给定的时刻只有一个主体可以进入临界区访问对象。如果临界区执行的时间比较长或者可能睡眠,可以使用下面这些互斥技术:信号量,大多数情况下使用互斥信号量...

2019-06-26 22:59:07

SMP缓存一致性

http://www.anger6.com/?p=641在阅读linux相关源码的过程中,经常看到内存屏障相关原语,如mb(),rmb(),wmb等。要想理解这些原语的作用,有必要理解SMP缓存一致性原理。在SMP系统中,处理器的每个核都有独立的一级缓存,因此同一内存位置的数据,可能在多个核一级缓存中存在多个副本,所以存在数据一致性的问题。目前主流的缓存一致性协议是MESI协议及其衍生协议...

2019-06-23 19:06:48

AUTOTOOLS工具

转自我的博客:http://www.anger6.com/?p=621在linux环境下通过源码安装程序,我们通常只需要下载源码包,解压,然后执行如下命令:./configuremakesudomakeinstall.之所以能这么easy,背后是autotools的功劳。使用autotools的基本流程如下:通常我们只需要编写Makefile.am和configu...

2019-06-23 11:17:16

GRPC C++源码阅读(12)—-无锁队列的实现

http://www.anger6.com/?p=582grpcc++库为了达到高性能,采用了许多先进的编程技术(虽然会违背我们的直觉,甚至影响我们流畅地阅读其代码。这也是为什么我要分析其源码的原因,funny!isn’tit?)。如异步非阻塞,线程池,无锁队列,I/O多路复用等。这篇文章来分析下无锁队列的实现。先来看一下无锁数据结构的概念。一个数据结构能被称为是无锁的...

2019-06-22 15:40:25

Docker源码分析(二)-------代码结构

http://www.anger6.com/?p=505再开始分析docker源码之前,我们先来看下代码的目录结构。现在docker分为商业版和社区版两个版本,社区版docker-ce的github地址如下:https://github.com/moby/moby下载好代码,可以看到moby目录结构如下:api:顾名思义,api目录是dockercli或者第三...

2019-06-09 21:56:44

gRPC C++源码阅读 grpc初始化

http://www.anger6.com/?p=420这篇文章讲述grpc核心代码的初始化流程。先看一个类图任何依赖grpc核心lib初始化的代码,都需要在.cc文件中定义类型为GrpcLibraryInitializer的静态变量g_gli_initializer。这个对象的作用通过类图可以看出,会以单例模式初始化g_glip,g_core_co...

2019-06-01 23:24:32

8.GRPC C++源码阅读 异步服务器

更多相关文章www.anger6.com还是通过官方的例子来讲述:grpc/src/examples/cpp/helloworld/greeter_async_server.cc:main函数很简单intmain(intargc,char**argv){ServerImplserver;server.Run();return0;}ServerImpl...

2019-05-25 22:44:46

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。