自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cool grass's blog

https://github.com/grasslog/WebServer

  • 博客(86)
  • 资源 (1)
  • 收藏
  • 关注

原创 协程调度器 Coroutine源码分析

最近准备对一个小巧但又不失精妙和整体的脉络的协程调度器动手了,为了能够深入的理解协程的调度机制和原理,特意分析了一个携程调度器的源码:coroutine。coroutine.h#pragma//协程的四种不同的状态#define COROUTINE_DEAD 0#define COROUTINE_READY 1#define COROUTINE_RUNNING 2#define C...

2019-05-20 23:09:27 1866 3

转载 C++ 开源协程库 libco——原理及应用

1 导论使用 C++ 来编写高性能的网络服务器程序,从来都不是件很容易的事情。在没有应用任何网络框架,从 epoll/kqueue 直接码起的时候尤其如此。即便使用 libevent, libev这样事件驱动的网络框架去构建你的服务,程序结构依然不会很简单。为何会这样?因为这类框架提供的都是非阻塞式的、异步的编程接口,异步的编程方式,这需要思维方式的转变。为什么 golang 近几年能够...

2019-05-19 13:10:45 4757 4

原创 信号的一生及其与线程的关系

信号简述信号是一种软件中断,用来处理异步事件。内核递送这些异步事件到某个进程,告诉进程某个特殊事件发生了。这些异步事件,可能来自硬件,比如访问了非法的内存地址,或者除以0了,可能来自用户的输入,比如shell终端上用户在键盘上敲击了Ctrl+C;还可能来自另一个进程,甚至来自进程自身。信号的本质是一种进程间的通信,一个进程向另一个进程发送信号,内核至少传递了信号值这个字段。实际上,通信的内容不...

2019-05-04 22:19:23 2084 3

转载 认识--Nginx

认识--Nginx Nginx简介Nginx安装和运行Nginx进程初识Nginx初体验静态文本服务器反向代理服务器负载均衡 入职半年来,一直在Nginx的基础上做模块开发,学到了很多东西,也碰到了很多坑。在业务开发的同时,由于对Nginx本身也是一知半解,造成了很多不必要的Bug。痛定思痛,很早以前就想系统的学习一下Nginx,迟迟没...

2019-07-12 16:29:35 303

原创 线程安全的 Observer 模式

一个动态创建的对象是否还活着一个动态创建的对象是否还活着,光看指针是看不出来的(引用也一样看不出来)。指针就是指向了一块内存,这块内存上的对象如果已经销毁,那么就根本不能访问(就像 free 之后的地址不能访问一样),既然不能访问又如何知道对象的状态呢?换句话说,判断一个指针是不是合法指针没有高效的办法,这是 C\C++ 指针问题的根源。(万一原地址又新建了一个新的对象呢?再万一这个新的对象的类...

2019-07-09 11:43:54 609

原创 http 协议--解析http请求的头部

有道翻译http 请求头部Google 翻译

2019-07-08 16:54:37 268

转载 Redis源码剖析--压缩列表ziplist

Redis源码剖析–压缩列表ziplistziplist结构头尾结构节点结构prev_entry_lengthencoding编码和解码ziplist基本操作创建空ziplist插入节点获取指定索引上的节点删除给定节点ziplist小结 压缩列表(ziplist)是由 一系列特殊编码的内存块构成的列表,其是Redis的列表建和哈希键的底层实现...

2019-07-01 16:32:58 233

转载 Redis源码剖析--整数集合Intset

Redis源码剖析–整数集合Intsetintset数据结构升级inset基本操作创建intset添加元素移除数据其他操作函数intset小结 本系列博客文章已经分析了Redis的大部分数据结构,包括动态字符串,双端链表,字典,跳跃表等,这些数据结构都非常强大实用,但是在内存消耗方面也非常“巨大”。Redis的数据都是存放在内存上面的,所以对内存的使用要求及...

2019-07-01 16:29:47 162

转载 Redis源码剖析--基数统计hyperloglog

Redis源码剖析--基数统计hyperloglog基数统计算法思路伯努利过程基数统计hyperloglog实现数据结构添加元素计算基数合并hyperloglog键hyperloglog小结Update 2016-12-9 Redis中hyperloglog是用来做基数统计的,其优点是:在输入元素的数量或者体积非常非常大的时候,计算...

2019-07-01 16:25:05 440

转载 Redis源码剖析--跳跃表 zskiplist

跳跃表数据结构跳跃表基本操作创建跳跃表插入节点跳跃表删除获取给定分值和成员的节点的排名区间操作跳跃表小结 跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问的目的。跳跃表在插入、删除和查找操作上的平均复杂度为O(logN),最坏为O(N),可以和红黑树相媲美,但是在实现起来,比红黑树简单很多。说起跳跃表,在前段时间面...

2019-07-01 10:31:27 208

转载 浅析Linux下的task_struct结构体

本文的重点是剖析task_struct,在这之前我们需要先了解一下进程的概念和Linux下进程控制块PCB。1.首先什么是进程?1.1进程可以这样描述:1>进程是程序的一个执行实例;2>进程是正在执行的程序;3>进程是能分配处理器并由处理器执行的实体。按内核观点来谈进程:它担当分配系统资源(CPU时间,内存)的实体。1.2进程的两个基本元素一是程序代码(...

2019-06-27 21:39:47 254

转载 Linux 进程切换和线程切换的区别分析

HTTP long pollingLinux eventfd

2019-06-27 10:57:44 1699

原创 Mark 一下专业名词

HTTP long pollingLinux eventfd

2019-06-27 10:55:51 168

转载 recv 函数返回值说明

recv函数int recv( SOCKET s, char FAR *buf, int len, int flags);不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。该函数的第一个参数指定接收端套接字描述符; 第二个...

2019-06-26 14:44:40 430

原创 多线程算法--归并排序

如下:#include <pthread.h>#include <iostream>#include <fstream>#include <string>#include <vector>#include <cstdlib>#include <typeinfo>#include <algori...

2019-06-22 15:31:45 855

转载 Redis源码剖析--字典dict

Redis源码剖析--字典dict dict数据结构哈希表节点(dictEntry)哈希表dictht字典dict字典类型函数dictType哈希算法rehash算法dict基本操作dict创建添加键值对查找键值对删除键值对字典删除dict小结 字典是Redis中的一个非常重要的底层数据结构,其应用相当广泛。Redi...

2019-06-22 11:45:29 199

转载 Redis源码剖析--双端链表sdlist

Redis源码剖析--双端链表sdlist sdlist的数据结构sdlist迭代器结构sdlist基本操作sdlist创建sdlist释放插入节点向头部插入节点向尾部添加节点向任意位置插入节点删除节点迭代器相关操作获取迭代器释放迭代器重置迭代器获取下一个迭代器链表复制函数查找函数链表旋转函数sdlist小结 ...

2019-06-22 11:43:56 333

转载 Redis源码剖析--动态字符串sds

Redis源码剖析--动态字符串sds sds数据结构定义sds基本操作函数sds创建函数sds释放函数sds动态调整函数sds连接操作函数sds其他操作函数sds小结 Redis没有使用C语言的字符串结构,而是自己设计了一个简单的动态字符串结构sds。它的特点是:可动态扩展内存、二进制安全和与传统的C语言字符串类型兼容。下面就从源...

2019-06-22 11:42:07 225

转载 Redis源码剖析--内存分配

Redis源码剖析--内存分配 功能函数总览内存管理函数内存申请函数zmalloc内存申请函数zcalloc内存调整函数zrecalloc内存释放函数辅助函数字符串复制方法设置异常处理函数开启线程安全获取已使用内存 深受侯捷老师的《STL源码剖析》一书的影响,在该书中开篇就对STL的空间配置器进行了一个详尽的介绍。以应用的角...

2019-06-22 11:39:31 164

转载 SO_REUSEADDR与SO_REUSEPORT平台差异性与测试

SO_REUSEADDR与SO_REUSEPORT平台差异性与测试 目录 平台差异性 测试 MACLinuxWindows总结references  正文  前些天,与另外一个项目组的同事聊天的时候,谈到他遇到的一个有意思的BUG。在window上启动服务器,然后客户端连接的时候收到一些奇怪的消息,查证了,原来是他自己的另一个工具也在相同的...

2019-06-21 17:21:54 462 1

转载 Nginx 架构概述

传统的进程-或用于处理并发连接的基于线程的模型涉及使用单独的进程或线程处理每个连接,并在网络或输入/输出上进行阻塞操作。根据应用,在内存和CPU消耗方面可能非常低效。产生一个单独的进程或线程需要准备一个新的运行时环境,包括分配堆和栈内存,以及创建新的执行上下文。额外的CPU时间也用于创建这些项目,这可能会导致由于线程在过多的上下文切换上的转换而导致性能下降。所有这些并发症都表现在较老的Web服务器...

2019-06-21 11:38:19 510

原创 从Nginx优秀的核心架构设计,揭秘其为何能支持高并发

目录:Nginx的整体架构Nginx的模块化设计Nginx的请求方式处理Nginx事件驱动模型Nginx进程处理模型Nginx简介Nginx 是一个免费的,开源的,高性能HTTP 服务器和反向代理。以其高性能,稳定性,丰富功能,简单的配置和低资源消耗而闻名。Nginx是一个Web服务器,也可以用作负载均衡器和HTTP 缓存。很多高知名度的网站都使用Nginx,比如:Netfli...

2019-06-21 10:08:28 250

转载 进程上下文与线程上下文

转 C/C++ 内存对齐原则及作用 2015年10月04日 09:50:49 chy19911123 ...

2019-06-20 14:41:20 1123

转载 c\c++ 笔试面试大汇总

<div id="post_detail"> C/C++ 笔试、面试题目大汇总 <div class="postText"> <div id="cnblogs_post_body" class="blogpost-body"><p style="text-align: left;">这些东西有点烦,有点无聊。如果要去C++...

2019-06-20 14:40:00 373

转载 TCP协议总结--停止等待协议,连续ARQ协议,滑动窗口协议

TCP协议总结--停止等待协议,连续ARQ协议,滑动窗口协议 Posted on 2015-09-16 16:27 杨博东的博客 阅读(4459) 评论(0) 编辑 收藏 </div> <div class="postbody"><div id="cnblogs_post_body" clas...

2019-06-20 14:38:18 1964

转载 进程间的通信的方式

进程间通信的方式——信号、管道、消息队列、共享内存 多进程:首先,先来讲一下fork之后,发生了什么事情。由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的理由是:因为一个进程的子进程可以多于一个,没...

2019-06-20 14:35:35 539

转载 彻底弄懂HTTP缓存机制及原理

彻底弄懂HTTP缓存机制及原理 前言Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能。但是对于很多前端同学来说,仅仅只是知道浏览器会对请求的静态文件进行缓存,但是为什么被缓存,缓存是怎样生效的,却并不是很清楚。在此,我会尝试用简单...

2019-06-20 14:33:23 148

转载 Linux 的任务调度机制

通用Linux系统支持实时和非实时两种进程,实时进程相对于普通进程具有绝对的优先级。对应地,实时进程采用SCHED_FIFO或者SCHED_RR调度策略,普通的进程采用SCHED_OTHER调度策略。在调度算法的实现上,Linux中的每个任务有四个与调度相关的参数,它们是rt_priority、policy、priority(nice)、counter。调度程序根据这四个参数进行进程调度...

2019-06-20 11:46:16 690

转载 DNS使用的是TCP协议还是UDP协议

原文:http://benbenxiongyuan.iteye.com/blog/1088085DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类。但很少有人知道DNS分别在什么情况下使用这两种协议。 先简单介绍下TCP与UDP。     TCP是一种面向连接的协议,提供可靠的...

2019-06-20 11:42:16 422

转载 slab 机制

slab机制 1.内部碎片和外部碎片外部碎片什么是外部碎片呢?我们通过一个图来解释:假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框。这个时候,在这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上去寻找5个连续的页框,这样子,久而久之就形成了页框的浪费。称为外部碎片。内核中使用伙伴算法的迁移机制很好...

2019-06-20 11:39:58 265

转载 浅析基于glibc的malloc

最近看了几个malloc和free的问题,总结一下。malloc和free由谁提供?一般来讲,它们是C Standard Library提供的而不是由操作系统的内核实现。例如微软的是msvcrt,Linux下是glibc。当然也有第三方库函数,比如jemalloc、tcmalloc。所以每个malloc和free的实现都有所不同,而且这些实现和内核之间是保留有一定自由度的。比如每次mallo...

2019-06-20 11:38:21 312

转载 Redis常用技术

<div id="post_detail"> Redis的那些最常见面试问题   随笔:经过长达一周的奔波和面试,电话面试,回首今天终于成功的入职了,总共面试了大概10家公司,包括阿里,京东,IBM等等,京东技术过了,学历因为非统招就被pass了,阿里面了2次电话面试就没下文了,估计是我当时最后提问题的时候减分了吧,其他的...

2019-06-20 11:26:06 351

转载 Redis与Memcached的比较

Redis与Memcached的比较网络IO模型Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats...

2019-06-19 13:06:10 152

转载 理解 glibc malloc:主流用户态内存分配器实现原理

Understanding glibc malloc日志:[2018-05-22] 内容优化与排版优化;[2017-03-17] 优化排版。译者...

2019-06-19 13:04:45 332

转载 Linux进程调度原理

转载自:http://www.cnblogs.com/zhaoyl/archive/2012/09/04/2671156.html  Linux进程优先级  进程提供了两种优先级,一种是普通的进程优先级,第二个是实时优先级。前者适用SCHED_NORMAL调度策略,后者可选SCHED_FIFO或SCHED_RR调度策略。任何时候,实时进程的优先级都高于普通进程,实...

2019-06-19 11:19:46 167

转载 gdb调试命令

用GDB调试程序 GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强...

2019-06-19 11:17:11 2229

转载 Linux- 内存管理器ptmalloc

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/initphp/article/details/50833036 </div> ...

2019-06-19 11:14:06 260

转载 Linux文件系统详解

AlanTu随笔 - 953, 文章 - 0, 评论 - 12, 引用 - 0 <div id="post_detail"><div class="post"> <h2> <a id="cb_post_title_url" href="https://www.cnblogs.com/alantu2018/p/8461...

2019-06-19 11:11:01 1308

转载 解读Raft

最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理。 我会将Raft协议拆成四个部分去总结: 算法基础选举和日志复制安全性节点变更 这是第一篇:《解读Raft(一 算法基础)》 什么是RAFT分布式系统除了提升整个体统的性能外还有一个重要特征就是提高...

2019-06-19 11:09:39 184

转载 Linux任务调度机制

作业调度策略:进程调度在近几个版本中都进行了重要的修改。我们先了解一下进程调度的原理:(1)进程类型在linux调度算法中,将进程分为两种类型,即:I/O消耗型和CPU消耗型。例如文本处理程序与正在执行的Make的程序。文本处理程序大部份时间都在等待I/O设备的输入,而make程序大部份时间都在CPU的处理上。因此为了提高响应速度,I/O消耗程序应该有较高的优先级,才能提高它的交互性。相反...

2019-06-19 11:07:22 282

google.html

google 的html,网站验证饿我去个人头不能玉米,欧赔【为委托人有图有

2019-05-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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