自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Acmery的小黑屋

d != c++;

  • 博客(21)
  • 收藏
  • 关注

原创 Linux进程(七):调度

Linux进程(七):调度调度模型I/O消耗型 vs. CPU消耗型调度器实现早期2.6:优先级数组和bitmapsRT调度策略:schedule normal调度算法CFS:完全公平调度例调度相关的系统调用   所有的操作系统,在设计调度器的时候,都是朝着两个目标去的:1、缩小响应时间:最小化某个任务的响应时间,哪怕牺牲其他的任务为代价。2、提高吞吐率:使整个系统的workload被最大化处理。但是这两个目标往往不可兼得,提高响应可能将会降低吞吐率,而提高吞吐率响应时间又将变长。因为吞吐率提高表示着资

2020-08-22 15:17:59 444

原创 Linux进程(六):睡眠与进程0、进程1

Linux进程(六):睡眠与进程0、进程1深度睡眠/浅睡眠进程0和进程1 深度睡眠/浅睡眠  在Linux系统中,进程有两种睡眠状态:深度睡眠和浅度睡眠。其中:深度睡眠只能被资源所唤醒,浅度睡眠可以被资源和signal所唤醒。​   深度睡眠有时不可避免,例如发生page fault时:在执行某个程序时,若某些代码段还没有进内存,在我们调用到某个函数时,可能会发生缺页中断。此时Linux内核将把这个进程置为深度睡眠。​   若上述情况不使用深度睡眠,也就是说若在发生page fault后该进

2020-08-22 15:13:03 550

原创 Linux进程(五):托孤

Linux进程(五):托孤例  在Linux进程中,若父进程先于子进程死亡,那么Linux内核将把子进程“托孤”给进程树为subreaper的进程,并由这个subreaper来负责该孤儿进程的“收尸过程”(清理task_struct),若未找到subreaper进程,则该孤儿进程之间托付给init进程:​   一个进程可以通过prctl这个系统调用把自己生命成一个subreaper ,PR_SET_CHILD_SUBREAPER是Linux3.4加入的新特性,把她设置为非零值,当前进程就会变成sub

2020-08-22 15:10:07 797

原创 Linux进程(四):线程

Linux进程(四):线程前言线程的概念内核线程轻量级进程LWP用户线程区别关于pthread线程库LinuxThread线程ID和进程ID的问题信号处理问题线程总数问题管理线程问题同步问题其他POSIX兼容性问题实时性问题NPTL伪装reference 前言​   在记录这篇博客之前,针对pthread_create函数创建的线程,网上的说法不一,有人说是用户级线程,有人说是LWP。在我亲自实验后发现,由pthread_create创建出来的线程是一个轻量级进程,只不过在这个机制上,Linux 2

2020-08-11 17:01:47 255

原创 Linux进程(三):进程的创建

Linux进程(三):进程的创建forkcopy-on-write(COW)vforkcloneclone, fork, vfork区别与联系referfence fork​   fork用来创建一个进程,当我们的进程执行到了fork的时候,系统将为我们复制一份进程资源,并且两个进程都将从fork函数返回。​   从内核的调度层面来说,只要一个进程存在task_struct,那么该进程就可以被调度。所以在我们的父进程把子进程fork出来的时刻,父进程会将该进程内的资源拷贝给子进程。​   

2020-08-11 16:56:27 277 1

原创 Linux进程(二):生命周期

   在Linux系统中,每个进程都有自己的生命周期。 Linux进程状态​   在Linux中,大多数进程都是被fork()出来的,进程被fork创建后,则会进入就绪态,进入就绪态的进程等待CPU资源,一旦进程获取到了CPU,该进程就进入到运行态,若是进程需要等待资源或IO,则进入就绪态。一下这张图大家应该不陌生。​   但是,在Linux中的进程,我们其实可以用下面这张图详细描述: 关于僵尸进程​   僵死态(僵尸进程):处于僵死态的进程的task_struct还没消失,但是该

2020-08-11 15:05:18 953

原创 Linux进程(一):初识

Linux进程(一):初识前言进程控制块 - PCB进程pid:用于区别进程进程内存的资源文件系统资源文件资源(打开的文件信息)task_struct的管理 前言​   说到进程,我们都会说出进程时操作系统资源分配最小单位、每个进程有独立的代码和数据空间等类似的套话,所以说了那么多之后,进程在Linux系统中究竟是什么样的存在呢?提到这个问题,就不得不说PCB。 进程控制块 - PCB​   进程,是操作系统的资源分配单位,我们需要弄懂进程,就需要弄懂这个进程的资源。而操作系统如何获取一个进

2020-08-10 21:26:36 200

原创 Nginx 内存池 - 原理解析

Nginx 内存池 - 原理解析Nginx 内存池 - 原理解析Nginx内存池的基本结构小块内存处理大块内存处理释放内存操作集:ngx_pool_cleanup_sNginx内存池操作创建内存池内存申请ngx_palloc_smallngx_palloc_large内存池重置内存释放内存池销毁Nginx 内存池 - 原理解析 ​   Nginx的内存池模块定义在ngx_palloc.h和ngx_palloc.c文件中,其中ngx_palloc.h文件中主要定义了相关的结构体,ngx_palloc.

2020-08-07 17:52:12 1064

原创 我听说过UDP之UDP的特点

我听说过UDP之UDP的特点UDP功能源端口目的端口长度校验和UDP VS TCP无连接 VS 有连接流量控制:NO VS YES面向报文 VS 面向字节流差错控制:NO VS YES双工性:一对多、一对一、多对一、多对多 VS 全双工UDP其它特性队列机制客户端服务端UDP典型应用  在学习网络编程的过程中,都是从socket、bind、listen、accept这一套组合拳开始的,绝大多数都很了解TCP的种种特性,但对UDP了解甚微,甚至从未写过UDP网络编程的代码。​   回看谢希仁的《计算机网

2020-07-28 18:05:28 356

原创 Ngnix handler模块编写

Ngnix handler模块编写Nginx handler模块编写实现模块功能module.c定义ngx_module变量实现ngx_http_count_module_set实现ngx_http_count_module_handler使用模块Nginx handler模块编写在编写完的模块编译成功后,将会被加载进objs目录下ngx_modules.c文件中的ngx_modules[]数组中。此数组中的模块将被顺序执行。 实现模块功能统计每个客户端的访问次数,并创建页面展示 module

2020-07-27 16:10:53 130

原创 Linux下进程间通信方式及实例

Linux下进程间通信方式及实例Linux下进程间通信方式及实例IPC概念管道管道函数小例子读管道写管道管道的优劣FIFO创建管道例mmap映射mmap函数例mmap九问进程通信例父子进程通信无血缘关系进程通信匿名映射信号信号的概念信号的机制共享内存创建共享内存访问共享内存删除共享内存Linux下进程间通信方式及实例IPC概念IPC:InterProcess Communication 进程间通信,通过内核提供的缓冲区进行数据交换的机制。IPC通信方式:pipe 管道 – 简单FIFO 有名管

2020-07-26 15:24:35 638

原创 nDPI注册自定义协议解析

nDPI注册自定义协议解析前言方法一:修改protos.txt方法二:添加源码在头文件添加新的协议ID编写协议源文件做好相关定义编写ndpi_search函数编写dissector函数在ndpi_main.c中注册测试前言​ 最近需要用到nDPI流量监测工具,由于其example中的ndpiReader已经十分强大,所以打算在ndpiReader的基础上增加可识别的自定义协议。在ndpiReader中增加自定义协议的方式有两种:是通过编辑example/protos.txt文件来使ndpiRead

2020-07-26 15:21:51 1423

原创 Linux下使用NTFS文件系统扩展设备

Linux下使用NTFS文件系统扩展设备Linux下使用NTFS文件系统扩展设备NTFS-3G介绍安装NTFS-3G方法一:手动下载安装安装步骤方法二:用yum使用NTFS-3G挂载NTFS文件系统磁盘Linux下使用NTFS文件系统扩展设备有时候做大数据量迁移时,为了快速迁移大数据,有可能在Linux服务器上临时挂载NTFS格式的移动硬盘, 一般情况下,Linux是识别不了NTFS格式移动硬盘的(需要重编译Linux核心才能,加挂NTFS分区),这时候为了能让Linux服务器能够识别NTFS的移动硬

2020-07-26 15:14:55 367

原创 Linux dd命令操作磁盘

Linux dd命令操作磁盘Linux dd命令操作磁盘dd参数说明实例:创建一个100M的空文件磁盘镜像克隆全部克隆分区克隆从镜像文件恢复磁盘或分区数据备份与恢复备份恢复备份MBR备份:恢复:其它实例分析备份软盘拷贝内存资料到硬盘从光盘拷贝iso镜像得到最恰当的block size测试硬盘读写速度修复硬盘销毁磁盘数据用dd命令制作硬盘镜像的特点显示dd命令进度Linux dd命令操作磁盘dd所执行的是简单粗暴的按字节复制,什么分区表啊,MBR啊统统照搬dd参数说明if =输入文件(或设备名称)

2020-07-26 15:13:17 2350

原创 算法 - 最短路径(三)- Bellman-Ford

算法 - 最短路径(三)- Bellman-Ford前言适用前提算法思想算法分步图解及解析第一次迭代第二轮迭代关于负圈前言之前在学习Bellman-Ford算法的时候,看了很多国内大牛写的算法解析(图解),但总觉得有一点不对劲,于是又上YouTube上找了几个讲解Bellman-Ford算法的视频看,方恍然大悟。所以在仅把我个人对此算法的理解写下来,若要真正追求真理,还请各位动手实验与观察。 适用前提没有负环的图,因为如果有负环的话可以一直在那个负环中刷出最短路径。 算法思想假设图中有V个节

2020-07-26 15:10:21 464

原创 算法 - 最短路径(二)- Dijkstra

算法 - 最短路径(2)- Dijkstra算法思路算法分步图解算法实现代码实现算法分析Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。 算法思路Dijkstra算法是一种类似于贪心的算法,步骤如下:首先指定一个节点,比如说V0,要计算V0到其他节点的最短路径。设置两个集合S和U:S中存放已找到的最短路径的顶点,初始时,集合S中只有一个顶点,即V0。U中存放当前还未找到最短路径的点,初始时,集合U中存放除了V0以外的所有点。在U中选取一个

2020-07-26 15:07:04 290

原创 算法 - 最短路径(一)- Floyd

算法 - 最短路径(一)- Floyd核心代码算法过程详解基本思想需要注意核心代码floyd的核心代码极度简单,时间复杂度为O(n3),代码实现部分只有五行: for(k=0;k<=n;k++) //遍历可经过的中点k for(i=0;i<=n;i++) //遍历起点i for(j=0;j<=n;j++) //遍历终点j if(e[i][j]>e[i][k]+e[k][j

2020-07-26 15:02:40 227

原创 误解题目引发的血案(KMP算法next数组的扩展应用)

误解题目引发的血案(KMP算法next数组的扩展应用)题目原文解题思路代码这个题目还可以折腾一下(榨取剩余价值)思路首先一个很简单的思路使用KMP中的next数组求解代码之前LeetCode上刷到一道题,题目很简单,但是由于但是误解了题意,所以做题的时候大费周折。。为了不辜负误解题意所作出的努力,所以决定把此过程记录下来。 题目原文对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。返回最长字符串 X,要求满足 X 能除尽

2020-07-26 14:55:52 131

原创 算法 - KMP算法原理顿悟有感

算法 - KMP算法KMP?KMP核心思想举个栗子上点代码next数组(1)若P~j~ == P~t~(2) 若P~j~ 和 P~t~不相等改进上面的KMP算法nextval求解nextval数组的一般方法上代码中国开国七十一年三月十二日下午,解衣欲睡,雨声入耳,悟以往,思来日,惧无以为生计,遂至哔哩哔哩寻KMP算术,观后遂顿悟,以作文记之。KMP?​ KMP算法是在某一字符串中寻找给定子串的算法,比起逐一比较的方法,KMP算法快了不少。KMP核心思想​ 比较过程如图所示:​ 此处的疑点:为什

2020-07-26 14:51:32 223

原创 C/C++手撕线程池(线程池的封装和实现)

C和C++线程池的封装及实现  本文源码地址:https://github.com/SCljh/thread_pool

2020-07-25 17:44:24 11895 9

原创 leveldb:Arena内存池

leveldb : Arena内存池ArenaArena内存管理模型Arena的构造与析构实现Arena提供的接口AllocateAllocateFallbackAllocateNewBlockAllocateAligned总结 Arena  Arena 是 leveldb 项目里面使用的轻量级的内存池对象,leveldb 用这个对象来管理内存的分配,简化了 new 和 delete 的调用。Arena的代码并不多,但也集成了google工程师巧妙的思维和想法,接下来就慢慢揭开Arena神秘

2020-07-24 17:09:47 563 6

空空如也

空空如也

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

TA关注的人

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