![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
Air_lml
这个作者很懒,什么都没留下…
展开
-
linux进程通信方式对比
管道:速度慢,容量有限(64kB,ulimit -a可以查询的pipe size 指的是一次性写入的大小限制),只有父子进程能通讯 半双工的(即数据只能在一个方向上流动)----(匿名管道)int pipe(int fd[2]); // 返回值:若成功返回0,失败返回-1当一个管道建立时,它会创建两个文件描述符:fd[0]为读而打开,fd[1]为写而打开要关闭管道只需将这两个文件描述符关闭即可。单个进程中的管道几乎没有任何用处。所以,通常调用 pipe 的进程接着调用 fork...原创 2020-12-14 00:14:56 · 176 阅读 · 0 评论 -
网络编程模型的演进之路
在没有IO多路复用的模型的情况下,为了支持高并发采取以下网络模型一:阻塞IO+多线程client连接服务器,服务器有一个线程阻塞的调用accept,accept接收到连接后,创建一个线程来读写读写,并且处理业务逻辑阻塞IO不能充分利用CPU,后面就出现了reactor模型二:reactor模型特点:1:非阻塞IO+IO多路复用(此处的IO多路复用采用的是epoll模型,关于为何选用epoll,可以看下以前的一篇文章https://blog.csdn.net/l1008610/原创 2020-12-13 00:26:56 · 164 阅读 · 0 评论 -
一个奇怪的现象,删除文件后,磁盘空间没有释放
当我在boot目录使用dd创建一个100M的文件后,boot的可用大小又375M变成了274M,但是当我rm -f test后,磁盘的可用大小哈市274M,磁盘空间没有得到释放,是不是很奇怪.这种在Linux是一种很常见的现象就是test文件的inode还被引用,只用当inode引用为0时才会被释放这个时候我们使用lsof命令查看一下删除的文件,inode还被引用信息就可以知道该文件被谁使用把a.out进程干掉,重新查看磁盘空间发现磁盘空间回来了在此我们可以总结一种方法:当磁..原创 2020-12-12 20:32:25 · 1043 阅读 · 0 评论 -
从linux内存管理的角度分析内存池设计与享元模式
linux的强大之处就在于任何一个点都能被别人借鉴发扬光大,成为独树一帜的知识点今天来分析一下linux的内存管理方式,两种常见的内存分配释放方式一:伙伴系统介绍把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。假设要申请一个256个页框的块,先从256个页框的链表中查找空闲块,如果没有,原创 2020-12-12 20:02:34 · 131 阅读 · 1 评论 -
高性能服务的零拷贝技术
在一个Http或者ftp服务器中经常会遇到请求数据的场景,客户端发送请求后,服务器需要调用read将数据从磁盘拷贝到内核的页缓冲区,然后从页缓冲区拷贝到应用程序的缓冲区,读取后然后将读取到数据发送出去,发送时将应用程序缓冲区的数据拷贝到内核中socket缓冲区内,然后从socket缓冲区中将数据拷贝到网卡缓冲区中将数据发送出去。可以看到发送一个文件的数据需要经过四次的拷贝,对应一个高性能的服务器,这肯定是痛点,一个优化点,这个时候,零拷贝的概念就出来了。零拷贝的目的就是减少拷贝次数。下面介绍两种在lin..原创 2020-12-12 17:55:15 · 101 阅读 · 0 评论 -
IO多路复用之select,poll,epoll分析
一:selectint select (int maxfd + 1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval * timeout);参数解释:maxfd+1:表示添加的所有fd的最大值加1,此处的有个注意点,select的最大fd是1024,此处的最大值也就是1025,说明一下为何要传入maxfd这个参数,首先readset,writeset,exceptset这几个参数都没有传入长度,原创 2020-12-12 17:00:30 · 126 阅读 · 0 评论 -
进程,线程,协程讲解
一:操作系统的内存模型程序运行先从内存中读取数据进入高速缓存区(当内存不够时,可能要先进行内存交换,先从磁盘中读取数据加入内存),进行运算,运算完,存入主存中。此处涉及到一个性能调优的知识点,进程绑核技术,也就是常说的多核编程,当一个进程绑定cpu时,该进程就会一直在该cpu上跑,就不会涉及CPU切换,还有一点是CPU分为L1,L2,L3,三级缓存,也就是上面说的高速缓存区,L1,L2是每个核心独享的,L3才是各个CPU共享的,这样程序在访问高速缓存区时,同一个CPU就能减少cache miss原创 2020-12-11 01:01:05 · 151 阅读 · 0 评论 -
samba安装
目前大部分的服务器开发,都是在WIN上写代码,linux编译,大概是因为大家用惯了图形界面,而且Linux也没用比较好的代码管理工具吧,为了能让WIN与Linux进行通信,大部分的都是使用samba进行通信,今天就讲讲samba的安装,有些新手可能不知道怎么安装。Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messa原创 2020-12-07 23:17:22 · 270 阅读 · 0 评论 -
gdb调试
调试GDB程序之前的安装gcc或者G++安装方式yum install gcc (gcc安装方式)yum install gcc-c++ (注意不是yum install g++)GDB调试方法有以下几种1,gdb ,在可执行文件目录下执行gdb,不然的加路径2,gdb ,core文件是服务器宕机之后生成的dump文件,可以定位问题3,gdb attach pi原创 2016-08-29 23:52:29 · 217 阅读 · 0 评论