
操作系统
LinuxG_G
90年程序员,坐标深圳某IT公司。对新技术充满兴趣,使用的编程语言:C/C++,python, Linux shell;
熟悉常见数据结构及算法,Linux编程,了解java,Android开发。
技能库:
STL, python, 多线程编程, TCP/IP, Linux shell
java, android, 数据库
爱好运动,兴趣比较广泛:basketball,badminton,swim,running等
博客主要用Github 及 csdn,欢迎交流。
联系方式:qq 754860961
展开
-
网络io零拷贝好文推荐
简述 Linux I/O 原理及零拷贝(下) — 网络 I/O原创 2023-02-01 09:33:56 · 169 阅读 · 0 评论 -
时间轮算法好文推荐
基于Linux内核的时间轮算法设计实现【附代码】原创 2023-01-31 17:09:06 · 142 阅读 · 0 评论 -
【好文推荐】C++内存问题,看这篇就够了
C++内存问题,看这篇就够了原创 2022-09-07 22:10:57 · 327 阅读 · 0 评论 -
Linux基础及工具命令进阶
linux基础及好用的命令详解原创 2022-07-26 16:41:29 · 211 阅读 · 0 评论 -
内存管理方面的一些好文推荐
CPU中的cache结构以及cache一致性ptmalloc、tcmalloc与jemalloc对比分析百度C++工程师的那些极限优化(内存篇)原创 2021-11-11 15:17:58 · 671 阅读 · 0 评论 -
ptmalloc、tcmalloc与jemalloc对比分析
转载自[ptmalloc、tcmalloc与jemalloc对比分析](https://www.cyningsun.com/07-07-2018/memory-allocator-contrasts.html)背景介绍在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低。但在晚上高峰时期,在CPU刚刚超过50%之后却出现了指数上升,服务在几分钟之内不可用。最终定位到是tcmalloc在内存分配的时候使用转载 2021-11-04 14:42:24 · 706 阅读 · 0 评论 -
文件IO零拷贝
分享一篇文章:文件 I/O 简明概述 —— DMA与零拷贝技术原创 2021-08-22 17:42:29 · 134 阅读 · 0 评论 -
[转]CPU中的cache结构以及cache一致性
timer实现https://cloud.tencent.com/developer/article/1553274转载 2021-08-15 23:06:26 · 663 阅读 · 0 评论 -
高效内存分配:tcmalloc和jemalloc
timer实现https://cloud.tencent.com/developer/article/1553274原创 2021-08-14 10:43:20 · 402 阅读 · 0 评论 -
[转]C++11中的内存模型下篇 - C++11支持的几种内存模型
在本系列的上篇,介绍了内存模型的基本概念,接下来看C++11中支持的几种内存模型。几种关系术语在接着继续解释之前,先了解一下几种关系术语。sequenced-beforesequenced-before用于表示单线程之间,两个操作上的先后顺序,这个顺序是非对称、可以进行传递的关系。它不仅仅表示两个操作之间的先后顺序,还表示了操作结果之间的可见性关系。两个操作A和操作B,如果有A sequenced-before B,除了表示操作A的顺序在B之前,还表示了操作A的结果操作B可见。hap转载 2020-10-06 21:38:33 · 528 阅读 · 1 评论 -
[转]C++11中的内存模型上篇 - 内存模型基础
前段时间花了些精力研究C++11引入的内存模型相关的操作,于是把相关的知识都学习了一下,将这个学习过程整理为两篇文档,这是第一篇,主要分析内存模型的一些基础概念,第二篇展开讨论C++11相关的操作。CPU架构的演进早期的CPU,CPU之间能共享访问的只有内存,此时的结构大体如图:随着硬件技术的发展,内存的访问已经跟不上CPU的执行速度,此时内存反而变成了瓶颈。为了加速读写速度,每个CPU也都有自己内部才能访问的缓存,结构变成了这样:其中:有多个CPU处理器...转载 2020-10-06 21:36:58 · 523 阅读 · 0 评论 -
[好文分享]C++11内存模型
[C++11中的内存模型上篇 - 内存模型基础](https://www.codedump.info/post/20191214-cxx11-memory-model-1/?hmsr=codercto.com&utm_medium=codercto.com&utm_source=codercto.com)[C++11中的内存模型下篇 - C++11支持的几种内存模型](https://www.codedump.info/post/20191214-cxx11-memory-model-2原创 2020-10-06 21:35:05 · 475 阅读 · 1 评论 -
tcp释放连接的close_wait, FIN_WAIT2, TIME_WAIT大量存在的原因及解决办法
文章目录存在close_wait的原因和解决办法存在FIN_WAIT2的原因和解决办法存在TIME_WAIT的原因和解决办法处理这类问题的实用命令存在close_wait的原因和解决办法close_wait这个状态存在于服务端,当服务端发送FIN(之前客户端已经发送过fin),请求关闭连接之后进入close_wait,然而没有收到客户端的响应,可能由于客户端掉线了(如网络故障或者掉电),没有及...原创 2020-02-23 16:32:20 · 5216 阅读 · 0 评论 -
popen和system函数的区别 以及 popen打开的FILE指针能否用close替代fclose关闭
popen和system函数的区别在c/cpp中执行shell命令,通常有两种方式,一种是popen,一种是system;其原理是两者调用fork函数从父进程中fork出一个子进程,然后在子进程中执行shell命令,其主要的区别如下:popenpopen会先fork一个子进程,然后子进程去执行shell命令,函数同时返回一个FILE指针给调用者,调用者可以根据FILE指针来获取函数的执行结...原创 2020-02-16 18:58:54 · 1817 阅读 · 0 评论 -
[转]Linux内存、Swap、Cache、Buffer详细解析
原文出处:https://my.oschina.net/circleblog/blog/7157111. 通过free命令看Linux内存total:总内存大小。used:已经使用的内存大小(这里面包含cached和buffers和shared部分)。free:空闲的内存大小。shared:进程间共享内存(一般不会用,可以忽略)。buffers:内存中写完的东西缓存起来...转载 2019-11-15 19:43:23 · 199 阅读 · 0 评论 -
Linux Kernel and Android 休眠与唤醒(中文版)
本文转载自http://www.thinksrc.com/2010/04/18/suspend-cn.htmlTable of Contents简介国际化版本信息对于休眠(suspend)的简单介绍Linux Suspend 的流程相关的文件:准备, 冻结进程让外设进入休眠ResumeAndroid 休眠(suspend)涉及到的文件:特性介转载 2018-04-30 11:14:16 · 1116 阅读 · 0 评论 -
使用 /sys 文件系统访问 Linux 内核
使用 /sys 文件系统访问 Linux 内核sysfs 虚拟文件系统提供了一种比 proc 更为理想的访问内核数据的途径sysfs 与 /syssysfs 文件系统总是被挂载在 /sys 挂载点上。虽然在较早期的2.6内核系统上并没有规定 sysfs 的标准挂载位置,可以把 sysfs 挂载在任何位置,但较近的2.6内核修正了这一规则,要求 sysfs 总是挂载在 /sys 目录上;针对以前的 ...转载 2018-04-01 17:04:25 · 306 阅读 · 0 评论 -
进程与线程的区别与联系
进程:资源分配的基本单位,也是调度运行的基本单位线程:进程中执行运行的最小单位,线程是操作系统可识别的最小执行和调度单位两者的关系:1. 一个线程只能属于一个进程,而一个进程可以有多个线程2. 进程是资源分配的基本单位。同一进程中的所有线程共享该进程的资源包括:代码段(代码和常量), 数据段(全局及静态区),扩展段(堆存储)。但每个线程有自己的栈段(用于存放局部变量)。3. 生成一个线程(Linu...原创 2018-03-03 14:49:45 · 293 阅读 · 0 评论 -
POSIX信号量
信号量是一种用于提供不同进程或统一进程间不同线程同步手段的原语,其操作包括P操作(将信号量的值-1)和V操作(将信号量值+1),其典型应用场景为多个生成者和多个消费者的情况,也用于控制多个进程的并发数。POSIX信号量包含两种类型:a) POSIX有名信号量:使用PosixIPC名字标识相关函数:头文件 #include创建:sem_t*sem_open(const ch原创 2015-10-07 23:17:53 · 481 阅读 · 0 评论 -
获取函数或程序相关的源码
如何获取某个函数或程序源代码:1 百度、google搜索,下载相关的源代码(这个就不说了,下面介绍方法2)2、 gnu网站下载(manual手册和package都能下),搜索相关的包即可下载(www.gnu.org:进入software--> 自由软件目录--> 查找相应的包即可,如libc)还提供了git下载的链接,可以用git clone进行下载。如下图: 问题来了:如原创 2015-10-04 11:50:17 · 491 阅读 · 0 评论 -
system函数和fork-exec机制
system函数使用man system查看帮助如下:NAME system -execute a shell command SYNOPSIS #include intsystem(const char *command); DESCRIPTION system() executes a comman原创 2015-08-30 16:29:05 · 1451 阅读 · 0 评论 -
system V信号量
相对于Posix信号量,system V信号量提供了更为丰富的操作,如Posix信号量一次只能增减1,而system V则没有此限制;另外,可以用一个函数(semget)创建一组(多个)信号量,而Posix信号量一次只能创建一个;因此可用其模拟Posix信号量。功能丰富的同时也决定了System V信号量的复杂性。1) 相关函数:头文件:创建或打开:semget操作:s原创 2015-10-18 11:16:00 · 624 阅读 · 0 评论 -
System V消息队列
System V消息队列使用消息队列标识符标识,与POSIX一样,具有足够权限的进程可以往队列发送消息,具有足够特权的进程可以从一个给定队列读取信息,其具有随内核的持续性。与管道不一样的是,发送下一个消息前不要求某个进程正在等待上一个消息的到达。下面介绍下相关函数:1) 头文件:2) 创建或访问消息队列:int msget(key_t key, int of原创 2015-10-01 17:52:39 · 546 阅读 · 0 评论 -
管道和FIFO
管道和FIFO1.1 管道和FIFO简介 管道是最初的unixIPC形式,广义的管道包含无名管道(狭义的管道)和有名管道(FIFO) 无名管道采用pipe函数创建,只能由亲缘关系的进程使用;有名管道突破了亲缘关系的限制,可以在不同进程间实现数据共享,管道和FIFO都是使用通常的read和write函数访问的,其由mkfifo函数创建,然原创 2015-09-26 21:36:41 · 561 阅读 · 0 评论 -
共享内存
共享内存是IPC形式中最快的方式。一旦将这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不再涉及内核。然而往该共享内存区存放信息或从中取走信息的进程间通常需要某种方式的同步。 实现共享内存的方式:利用mmap函数、使用Posix共享内存区、使用SystemV共享内存区,下面分别介绍。1.1 利用mmap进行内存映射 作用:open文件之后调用mmap把它映射原创 2015-11-22 21:54:02 · 558 阅读 · 0 评论 -
查找内存泄露的工具 (转)
Windows/Linux下C/C++内存泄露检测工具 文章出处:http://blog.163.com/cp7618@yeah/blog/static/702347772012728105356157/ 转的人多了,原创不知道在哪了一 Window下的内存泄露检测(以VC++环境为例)灵活自由是C语言的一大特色,但这个特色也难以避免的带来一些副作用,比如内存泄露。众转载 2015-12-06 19:52:52 · 753 阅读 · 0 评论 -
文件描述符及文件指针
文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(ProcessControl Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。而文件描述符是原创 2016-05-14 21:59:32 · 739 阅读 · 0 评论 -
文件描述符和文件指针的区别
文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。 文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。而文件转载 2017-06-29 23:03:52 · 295 阅读 · 0 评论 -
标准io库的缓冲问题
标准io函数库执行以下三类缓冲:1) 完全缓冲:在缓冲区满,进程显示调用fflush,或进程调用exit终止自身(C库的exit函数调用标准I/O清理函数)。标准I/O缓冲区的大小通常为8192字节。2) 行缓冲:意味着只在出现下列情况下才发生I/O:碰到一个换行符,进程调用fflush,或进程调用exit终止自身3) 不缓冲:每次调用标准I/O输出函数都发生I/O标准I/O...原创 2017-06-29 23:15:40 · 381 阅读 · 0 评论 -
Linux 内核
在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink https://www.ibm.com/developerworks/cn/linux/l-kerns-usrs/原创 2017-07-13 21:06:06 · 340 阅读 · 0 评论 -
netlink详解
分享一些较好的关于netlink的文章,netlink的代码一般用不到(除非涉及内核通信),能看懂,掌握机制原理即可:netlink机制参考链接:Communicating between the kernel and user-space in Linux using Netlink Sockets: Source code reference内核通信之Netlink源码分析-用原创 2017-07-21 23:07:57 · 834 阅读 · 0 评论 -
windows下模块分析软件——Dependency Walker
Linux系统下我们可以借助file, readelf 等命令来查看ELF文件的格式(32位或64位)及依赖(依赖的模块)。那么windows下面有没有类似的工具?答案是肯定的,Dependency Walker就是这样一个软件,可以在http://www.dependencywalker.com查看该软件的说明及下载该软件。其UI如下:我是在运行python程序时遇到了“cann原创 2017-11-19 16:11:45 · 2370 阅读 · 0 评论 -
Android内核开发:图解Android系统的启动过程
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ticktick.blog.51cto.com/823160/1659473本文是《Android内核开发》系列的第六篇文章,前面的几篇文章介绍了Android内核开发相关的基础知识,包括:Android源码的下载、版本和分支介绍、编译和烧写等等,从本文起就要开始真正地转载 2017-11-15 22:31:44 · 766 阅读 · 0 评论 -
POSIX消息队列
POSIX消息队列 消息队列可认为是一个消息链表,有写权限的线程可以往消息队列中写消息,有读权限的线程可以从队列中读取消息,从而实现数据共享。每个消息都是一条记录,具有以下属性:优先级(无符号整数或长整数类型)消息的数据部分长度数据本身。1、 相关函数头文件:#include 创建和打开:mqd_t mq_open(const char *name, i原创 2015-09-27 19:52:04 · 724 阅读 · 0 评论