自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 收藏
  • 关注

原创 epoll源码剖析

用途epoll类似于select和poll 也是把要监听的文件描述符纳入自己的监管但是由于select和poll的缺点存在,基于selec或者pollt模型的服务器程序,要达到10万级别的并发访问,是一个很难完成的任务。由于epoll的实现机制与select/poll机制完全不同,上面所说的 select/poll的缺点在epoll上不复存在。用法下面是epoll监控标准输入(文件...

2020-04-18 12:47:06 368 1

原创 小白也能看懂的poll源码解析

用途poll函数工作原理与select函数类似,也是监管一系列的文件描述符,阻塞的去轮询看这些文件描述符是否可读/可写/异常,再去调用io函数读写用法看一下下面这段简单的代码...

2020-04-17 15:44:53 764 1

原创 select源码剖析

用途相比与普通的阻塞IO模型select相当于是一名监管员把多个要处理的文件描述符纳入自己的监管在设定的时间内阻塞查询 看哪些套接字是就绪的如果是就绪的则对这些套接字进行IO处...

2020-04-12 02:53:48 1154 1

原创 STL常用用法汇总

2020-04-08 09:49:13 787 1

原创 进程上下文切换与线程上下文切换

进程上下文切换进程上下文包含了进程执行所需要的所有信息。用户地址空间:包括程序代码,数据,用户堆栈等;控制信息:进程描述符,内核栈等;硬件上下文:进程恢复前,必须装入寄存器的数据统称为硬件上下文。进程切换分3步a.切换页目录以使用新的地址空间b.切换内核栈c.切换硬件上下文4、刷新TLB5、系统调度器的代码执行线程上下文切换 对于linux来说,线程和进程的最大...

2020-04-06 22:45:33 4429 1

原创 线程的用户级和内核级

进程的实现只能由操作系统内核来实现,而不存在用户态实现的情况。但是对于线程就不同了,线程的管理者可以是用户也可以是操作系统本身,线程是进程内部的东西,当然存在由进程直接管理线程的可能性。因此线程的实现就应该分为内核态线程实现和用户态线程实现。内核态线程实现: 线程是进程的不同执行序列,也就是说线程是独立运行的基本单位,也是CPU调度的基本单位。那么操作系统是如何实现管理线程的呢? ...

2020-04-06 22:15:37 476

原创 协程的理解

1.多线程之间可以并发运行,提高效率,多协程之间也可以并发运行。这样多线程的好处就被继承了过来。2.多线程在访问资源时可能会出现安全问题,需要加锁。多协程则没有这方面的问题,因为它们位于一个线程内,一个线程是不需要加锁的。3.多线程的切换需要操作系统参与且在内核空间完成。多协程的切换在用户空间完成,不需要操作系统干预,因为操作系统压根就不知道协程的存在。4.那多协程该如何切换(也...

2020-04-06 21:49:14 366

原创 CPU的工作过程

cpu的组成指令的种类cpu的工作流程cpu的执行实例顺序执行条件分支/循环机制函数调用

2020-04-06 21:26:48 620 1

原创 离散内存分配

文章目录虚拟内存虚拟内存的引入问题方法优点总结虚拟内存的地址空间虚拟地址空间的划分虚拟地址空间的用户态内核态虚拟内存的实现分页式数据结构工作过程分段式引入区别过程段页式引入过程虚拟内存虚拟内存的引入问题就可以避免内存紧缩,减少碎片。同时运行多道程序并发和大程序执行随着发展程序往往大到内存无法容纳而且并发执行时可能剩余空间不支持另外的程序执行如果用交换技术 每次可能会交换几GB内存,...

2020-04-06 19:09:41 1477

原创 连续内存分配

文章目录连续内存分配单一连续存储管理引入特点分区连续存储管理特点特性辅助连续内存分配是指为一个程序分配连续的内存空间单一连续存储管理引入早期计算机是没有存储器抽象的 程序直接访问内存在这种情况下 内存分为两个区域 系统区和用户区 ,即单一连续存储管理特点优点是:简单 易于管理缺点是: 只能支持单道程序,内存浪费 且用户程序容易破坏操作系统分区连续存储管理特点创建了程...

2020-04-06 16:59:45 599

原创 C++中的static关键字大揭秘

静态全局变量特性1. 存放空间:存放在全局数据区 从声明时开始初始化main函数结束销毁2. 初始化:如果没有初始化则会被默认初始化为03. 作用域:作用域为整个源文件,4. 区别:和全局变量的区别是 静态全局只在声明它的整个文件有效5. 而在文件之外是不可见的 而全局变量是文件之间共享的例子#include<iostream>using namespace s...

2020-03-22 13:53:50 207

原创 This指针大揭秘

原理this指针是什么?1.this指针是类的指针,指向对象的首地址。2.成员函数默认会隐式的包含this指针形参3.在成员函数中所有对成员变量的调用都会默认转换成用this指针对成员变量的调用4.this指针只能在成员函数中使用,在全局函数、静态成员函数中都不能用this。5.在成员函数中调用delete this会出现什么问题?当调用delete this时,类对象的内...

2020-03-22 11:32:28 264

原创 C++11实现自旋锁

原理自旋锁是什么?互斥锁当想加锁但是锁已经被别的线程占有时,它会阻塞自旋锁当想加锁但是锁已经被别的线程占有时,它会轮询等待自旋锁用在哪?自旋锁主要适用于线程占有锁得时间短的场景,如果用互斥锁要经历从阻塞到唤醒的过程,相对于自旋锁线程一直处理就绪状态轮询等待耗费的时间更多但是如果线程占有锁的时间很长则其他等待持有自旋锁线程就会处于长时间的轮询忙等所以适用于线程占有锁的时间较短的...

2020-03-20 11:58:26 579

原创 基于Reactor实现的Web服务器(可运行代码+图文解析)

Version1.0架构点击查看大图 其中线程池中工作线程取用任务队列里面的任务也就是进行http报文分析 报文响应时候的流程如下源码详细的源码讲解请看注释特性1. 在整个epoll监听循环开始之前 先屏蔽掉SIGPIPE信号 //默认读写一个关闭的socket会触发sigpipe信号 该信号的默认操作是关闭进程 这明显是我们不想要的 //所以我们需要重...

2020-03-13 02:05:42 1204

原创 一次编译"未定义引用错误"的定位

问题原因项目采用cmake构建为了简化问题描述 以hello_world编译为例项目目录树如下是因为cmake中没有将头文件引入cmakelist万能的写法如下问题解决注意倒数三行...

2020-03-11 15:03:40 285

原创 Linux核心命令汇总(思维导图+实例讲解)

一个小时学会所有Linux核心命令文件相关命令文件属性操作文件属性组成Linux上的一个文件属性组成如上,需要注意的是第二部分,格式如下文件类型 当为[ d]则是目录 当为[ -]则是普通文件; 若是[ l]则表示为链接文档(link file); 若是[ b]则表示为装置文件里面的可供储存的接口设备(可随机存取装置); 若是[ c]则表示...

2020-03-02 12:14:35 4803

原创 1个小时学会所有Linux核心命令

01 你的痛点作为一个开发者,Linux命令是我们必不可少的工具但是你在使用的时候是否有以下痛点01Linux命令太多了 !!!市面上随便一本Linu...

2020-02-29 19:37:51 347

原创 后端开发必须掌握的Linux命令[Shell脚本篇]

介绍一句话说明shell脚本是个啥shell脚本就是将多个shell指令汇集到一起去完成一个复杂的功能类似windows下的批处理文件 一般以sh为文件后缀语法程序结构一张图说明shell脚本的结构是怎样的如上图所示右边就是最简单的一个shell脚本 , 功能是打印出"Hello World左边就是它对应的一个程序结构 ,依次是 shell版本声明 注释部分声明 环境变量声明 ...

2020-02-28 21:48:34 911

原创 后端开发必须掌握的Linux命令[管道篇]

管道相关命令cut功能主要的用途在于将『同一行里面的数据进行分解!』 处理的讯息是以『行』为单位以某些字符当作分割的参数,然后来将数据加以切割,以取得我们所需要的数据。输入cut[参数]实例grep功能刚刚的 cut 是将一行讯息当中,取出某部分我们想要的,而 grep 则是分析一行讯息, 若当中有我们所需要的信息,就将该行拿出来~输入实例sor...

2020-02-28 14:49:14 199

原创 后端开发必须掌握的Linux命令[变量篇]

变量相关命令变量的声明赋值功能相当于是声明一个变量 同时给变量赋值输入声明方法1: 通过 赋值符号 =声明方法2: 通过read用read以后 变量赋值是通过终端等待用户的键盘输入 来执行[dmtsai@study ~]$ read [-pt] variable选项与参数:-p :后面可以接提示字符!-t :后面可以接等待的『秒数!』实例变量的普通赋值形式[dmt...

2020-02-28 13:33:04 311

原创 后端开发必须掌握的Linux命令[bash篇]

bash相关操作数据流重导向功能将命令在终端的标准输出 标准出错 重定向到别的地方比如文件中或者读取文件的内容来取代标准输入输入语法1. 标准输入 (stdin) :代码为 0 ,使用 < 或 << ; 一般和cat配合使用将一个文件的内容输出到另外一个文件2. 标准输出 (stdout):代码为 1 ,使用 > 或 >> ; 将命令的标准输出重定...

2020-02-28 08:58:40 444

原创 后端开发必须掌握的Linux命令[文件篇]

文件相关操作文件属性操作文件属性组成Linux上一个文件属性组成如上,需要注意的是第二部分,格式如下文件类型 当为[ d]则是目录 当为[ -]则是普通文件; 若是[ l]则表示为链接文档(link file); 若是[ b]则表示为装置文件里面的可供储存的接口设备(可随机存取装置); 若是[ c]则表示为装置文件里面的串行端口设备,例如键盘、鼠标...

2020-02-27 18:53:56 343

原创 二十分钟学会Vim

Vim的三种模式一般模式进入: vim 一开始打开一个文件就默认进入了一般模式功能: 在一般模式下你可执行 移动 复制 粘贴 删除字符 删除整行编辑模式进入 : vim在一般模式下按 i o a R 四个键之一就进入了编辑模式在编辑模式下按ESC就返回一般模式功能: 在编辑模式下可以编辑文件内容命令模式进入 : vim在一般模式下输按 : 即冒号键就进入了命令模式在命令...

2020-02-27 15:59:04 304

原创 后端开发必须掌握的Linux命令[网络篇]

网络相关命令netstat功能显示网络状态。输入netstat [参数]-a-显示所有socket-l 显示所有处于监听状态的socket-t 显示所有使用tcp协议的socket-u-显示UDP传输协议的连线状况。-s 显示所有网络协议的统计信息。输出1. 列出所有端口 (包括监听和未监听的)列出所有端口: netstat -a列出所有tcp端口:...

2020-02-26 23:38:48 354

原创 后台开发必备的那些linux命令[磁盘篇]

磁盘相关命令du功能显示指定的目录或文件所占用的磁盘空间。输入语法du [参数][目录路径或文件路径]常用参数:-a 显示指定目录下所有单独的文件大小 后面不加文件或者目录路径则表示本目录-b 以byte为单位显示-c 除了显示单独的目录或者文件的大小外,同时也显示所有目录或文件的总和。-h 以K,M,G为单位显示,提高信息的可读性。如果不加参数则显示当前目录下总的大...

2020-02-26 22:36:09 379

原创 后端开发必须掌握的Linux命令[进程篇]

进程相关命令

2020-02-26 14:11:41 948

原创 一个后台开发工程师必须掌握的那些Linux命令--性能监测篇

本篇文章是Linux命令系列的第一篇文章又挖了一个新坑~本系列将按照上面五大模块对Linux命令讲解让你知道一个后台开发工程师除了cd ls rm这...

2020-02-25 22:54:55 277

原创 后端开发必须掌握的Linux命令[性能检测篇]

性能监测相关命令mpstat功能:显示CPU的状态信息这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。 输入语法:mpstat(选项)(参数)选项-A : 此选项等效于# mpstat -I ALL -u -P ALL-I {SUM | CPU | ALL} : 报告中断统计信...

2020-02-25 21:48:44 406

原创 女朋友也能看懂的TLS技术讲解

FBI Warning硬核预警:本文需要一定的多线程基础知识没学过的小伙伴也没关系本文将会通俗的讲解说不定看着看着你就懂了呢Q:啥叫TLS ? ...

2020-02-21 00:04:43 1020

原创 三张图搞懂线程局部存储TLS技术

2020-02-20 21:56:48 316

原创 高并发内存池的实现

第一层:Thread Cache(线程缓存)1.thread cache是内存池中的第一层缓存,这一层缓存主要解决的问题就是并发状态下锁竞争的效率问题。线程在这里申请不需要加锁,每一个线程都有自己独立的cache,这也就是这个项目并发高效的地方。怎么实现每个线程都拥有自己唯一的线程缓存呢?为了避免加锁带来的效率,在Thread Cache中使用(tls)thread local st...

2020-02-18 15:14:26 790

原创 你的微信消息是怎么发出去的?

本文是计算机网络系列的第一篇文章学东西得先有个全局观才不会只见树木不见森林所以本文将先从计算机网络的网络模型开始分别介绍各层模型它分别是啥,它包含了啥...

2020-02-12 23:34:34 2992

原创 浅谈计算机的七层网络模型

引入本文是计算机网络系列的第一篇文章学东西得先有个全局观才不会只见树木不见森林所以本文将先从计算机网络的网络模型开始分别介绍各层模型分别是啥, 它包含了啥,它能干啥.计算机网络的整体结构其实很清晰就是由几层不同的协议层来组成一套网络模型 层层配合 完成网络传输搞明白了网络模型的层次结构从整体上你也就搞懂了"网络"是怎么一回事例子下面进入...

2020-02-12 22:29:24 302

原创 三个小时入门Go语言

基础知识(1h)引入变量类型运算符控制语句作用域面向对象(1h)结构体方法包并发编程(1h)Goroutinechannel

2020-01-26 13:35:11 415

原创 Golang 学习笔记-----包

包介绍包定义包的可见性包的导入包的初始化常用包os包time包bytes包fmt包path/filepath包encoding/json 包bufio包os/exec包protobuf 包strconv 包context包database/sql包runtime包flag包os/signal包...

2020-01-26 13:27:17 375

原创 Golang 学习笔记-----方法

概念使用(1)当使用值接收者声明方法,调用时会使用这个值的一个副本来执行。此时该类型的值不会被改变,例:type user struct { name string email string}func (u user) changeEmail0(email string){ u.email = emailfmt.Println("in func"...

2020-01-26 13:00:21 168

原创 Golang 学习笔记-----Channel

概念声明初始化操作 发送 接收 关闭 判断关闭分类 有缓冲通道 无缓冲通道 单向通道异常概念单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使...

2020-01-26 11:19:55 702

原创 Golang 学习笔记-----Goroutine

引入关于并发与并行关于协程关于goroutine使用单个多个池同步介绍互斥锁读写锁原子操作执行 可增长的栈 goroutine调度 GOMAXPROCS回收sync.WaitGroupsync.Oncesync.Map...

2020-01-26 11:06:39 630

原创 Golang 学习笔记-----基础数据类型

整型一般整型整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。类型 描述 uint8 无符号 8位整型 (0 到 255) uint16 ...

2020-01-26 01:14:15 495

原创 Golang 学习笔记----作用域

2020-01-25 21:03:27 202

空空如也

空空如也

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

TA关注的人

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