6 惜暮

尚未进行身份认证

博客中所有代码都可以在GitHub上面找到: GitHub地址:https://github.com/leetcode-hust/leetcode

等级
博文 308
排名 4k+

Golang 的 sync.Pool设计思路与原理

sync.Pool设计思路与原理使用实例底层数据结构PutGetRuntime垃圾回收Hook总结使用实例sync.Pool设计的目的是用来保存和复用临时对象,以减少内存分配,降低CG压力。Pool对外暴露的主要有三个接口:func(p*Pool)Get()interface{}func(p*Pool)Put(xinterface{})Newfunc()int...

2019-05-29 13:44:49

Fasthttp里面 goroutine pool 实现原理

Fasthttp里面goroutinepool实现原理应用实例源码分析调用链路分析workerPool的start和stopworkerPool的Serve逻辑架构图这篇文章主要讲解fasthttp这个http库关于协程池做的优化原理;应用实例fasthttp是一个非常优秀的webserver框架,github上的benchmark号称比官方的net/http快1...

2019-05-26 14:26:51

goroutine pool的简单实现

goroutinepool的简单实现golangwebserver原理粗糙版本的goroutinepool升级版goroutinepool这篇文章从go提供的webserver的出发,理解gowebserver的实现方式,提出goroutinepool的重要性,然后自己实现一个简单版本的goroutinepoolgolangwebserver原理我们先来看一个非...

2019-05-26 00:22:32

【树结构】Trie字典树

字典树概念使用场景:实现1.数据模型2.添加字符串3.删除操作4.获取单词频率5.测试概念Trie树的名字有很多,比如字典树,前缀树等等。下面我们有and,as,at,cn,com这些关键词,那么如何构建trie树呢?从上面的图中,我们或多或少的可以发现一些好玩的特性。第一:根节点不包含字符,除根节点外的每一个子节点都包含一个字符。第二:从根节点到某一节点,路径上经...

2019-03-26 00:06:54

【树结构】平衡二叉树

平衡二叉树平衡二叉树定义数据模型定义(go):旋转1.左左情况(左子树的左边节点)2.右右情况(右子树的右边节点)3.左右情况(左子树的右边节点)3.右左情况(右子树的左边节点)新增节点删除节点平衡二叉树定义前面我们说过,二叉查找树不是严格的O(logN),导致了在真实场景中没有用武之地,谁也不愿意有O(N)的情况发生。当有很多数据灌到我的树中时,我肯定会希望最好是以“完全二叉树”的形式...

2019-03-25 22:47:23

golang syscall原理

GolangSystemcall1.入口2.系统调用管理3.runtime中的SYSCALL4.用户代码的系统调用和调度交互entersyscall和exitsyscall的pipelineentersyscallexitsyscallentersyscallblock5.总结这篇文章主要是分析在golang里面用户态进行系统调用时候的一些原理,主要关注点将会放在systemcall...

2019-03-07 16:44:50

TCMalloc : Thread-Caching Malloc 论文翻译

TCMallocMotivationOverviewSmallObjectAllocationLargeObjectAllocationSpansDeallocation(释放)CentralFreeListsforSmallObjectsGarbageCollectionofThreadCaches本文主要是对于TCMalloc内存分配论文的学习,英文论文Thre...

2019-02-01 22:31:12

Golang-Scheduler原理解析

本文主要分析Golang里面对于协程的调度原理,本文与Golang的memoryallocation、channel、garbagecollection这三个主题是紧密相关的,本文scheduler作为系列的第一篇文章。文章大体上的思路是这样的:section1:主要图示和文字介绍scheduler的原理;section2:从源码和模型的角度介绍scheduler原理;section...

2019-01-16 23:35:47

GC reference count algorithm

本文主要介绍GC的引用计数算法,包括引用计数算法过程、优缺点、以及优化过程。GCreferencecountalgorithm1.引用计数算法1.1计数器的增减new_obj()函数update_ptr()函数2.引用计数算法的优缺点3.引用计数的优化3.1延迟引用计数法3.2Sticky引用计数法3.3一位引用计数法3.4部分标记-清除算法1.引用计数算法核...

2019-01-13 21:51:32

GC Mark-Sweep Algorithm

本文主要介绍标准的标记-清除算法的过程,优缺点,以及做的一些优化过程。GCMark-SweepAlgorithm1.GC标记清除算法1.1标记阶段1.2标记阶段算法1.3清除阶段算法1.4已回收空闲内存空间再分配1.5合并(内存碎片整理)2.GC标记清除算法的优缺点3.GC标记清除算法的优化3.1multi-size空闲链表优化分配速度1.GC标记清除算法标记清除算法主...

2019-01-13 20:47:41

Garbage Collection基础知识

在学习GarbageCollection算法之前,我们需要了解一些GarbageCollection相关的基础知识,比如对象、头、域、指针、堆等等。

2019-01-13 14:52:05

Golang-gopark函数和goready函数原理分析

Golang-gopark函数和goready函数原理分析gopark函数goready函数前面介绍的scheduler和channel里面都与gopark和goready这两个函数紧密相关,但是站在上层可以理解这两个函数的作用,但是出于对源码探索,我们要明白这两个函数不仅仅做了啥,还要知道怎么做的。本文主要内容是从底层源码分析这两个函数原理:gopark函数goready函数go...

2019-01-06 15:10:00

Golang-Channel原理解析

本文主要分析golang实现并发基础组件channel的实现原理;主要内容分为几个部分Section1:channel使用实例分析Section2:源码分析Section源码分析channel接收数据所有执行chan<ep接收channel数据的代码,最后都会调用到chan.go里面的chanrecv函数。...

2019-01-06 00:21:35

C++ explicit关键字:禁止隐式转换

explicit关键字是用来防止由构造函数定义的隐式转换。要明白这个关键字的含义,首先我们要知道class类型的对象的隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。比如:classSomeBody{public: SomeBody(conststd::string&name=""):m_name(nam...

2018-12-18 19:17:58

C++成员初始化列表

C++类成员初始化列表C++类型定义C++构造函数的初始化列表定义C++构造函数执行的两个阶段为什么使用初始化列表C++里面哪些东西必须放在初始化列表里面成员变量的初始化顺序这边文章主要学习C++里面的成员初始化列表。然后分析为什么需要成员初始化列表,C++构造器调用机制与Java区别。C++类型定义在C++里面定义一个类型(比如有默认构造器的Test类)的方式一般是:Testt1;...

2018-12-16 14:20:38

C++11 智能指针

本文主要讲解C++11中的智能指针主要内容:原始指针使用有什么缺点(主要是资源释放、证明周期、挂起引用)C++98里面的auto_ptr有什么缺点(所有权转移问题、不能指向数组、不能与容器组合使用)C++11提出的更加智能指针:shared_ptr、weak_ptr、unique_ptr优势...

2018-12-15 18:16:21

C++ inline函数

1.C++引用inline原因在我们的系统中可能经常会有一些场景:for循环调用一个工具处理函数或则是递归调用一些算法。我们知道调用一个任意函数都会为这个函数创建栈空间,如果频繁的调用小函数会消耗大量的栈空间,对内存造成很大的压力,甚至会导致内存枯竭。C++为了解决这个问题也就创造了内联函数,也就是inline。下面我们看一个使用内联函数的例子:#include<stdio.h&gt...

2018-12-10 15:53:45

C++中const关键字修饰

C++中const使用的地方非常多,修饰包括:全局变量、函数、函数参数等等,这篇文章主要是总结一下const各种使用的规则以及需要注意事项。

2018-12-10 13:31:04

C++局部变量、全局变量的作用域及范围&动态内存管理

本文主要介绍C++中的局部变量、全局变量、以及动态内存管理的变量。本文不涉及静态变量static,所以描述的观点不包括static变量。局部变量和全局变量局部变量一般指函数内部的局部变量,这部分的变量保存在栈里面,当函数调用结束,这些局部变量就会被自动释放。可以说这部分变量是系统自动管理的全局变量或则是filescope的变量。这部分变量存储在全局/静态存储区,这部分变量的作用域是从...

2018-12-09 17:46:28

C++函数传值方式

本文主要分析C++里面两大类函数传参方式:传值和传址(传引用和传指针)1.传值我们知道当我们调用一个函数时,OS会在内存中为这个函数建立起一块程序栈帧,这个栈帧提供了函数参数的存储空间。对于传值这种方式,实际上是将函数参数进行了一次copy,传递到函数的实际上是变量的一个副本。在函数内部对参数进行的update不会影响到原本函数外的参数的值。比如以下代码段:#include<...

2018-12-09 17:03:11
奖章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。