Linux
一纸一清风
滋滋有味的学习 津津有味的生活
展开
-
将你的VIM配置成go的IDEA
https://learnku.com/articles/24924主要配置时还是要借助上面这个链接,当我在mac上部署的时候,配置出来屏幕变成蓝色,最后发现原因是在主题颜色,将主题颜色和24Bit颜色删掉即可解决配置时出现pulg不是编译器命令curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.git...原创 2019-11-12 11:06:37 · 342 阅读 · 0 评论 -
TCP与UDP小结,附带面试题
TCP小结 为什么TCP这么复杂? 因为要保证可靠性, 同时又尽可能的提高性能.可靠性:校验和在TCP头部有一个16位的校验和,通过这个校验和来验证数据是否完整序列号(按序到达)数据按照分包范围,但是从第一个包到最后一个包的序列号是连续的,seq 1 ~ 1000确认应答当对端收到数据包后,会回复确认收到的包,ack = seq + 1超时重发...原创 2019-08-20 11:05:44 · 506 阅读 · 0 评论 -
wait()和waitpid()区别
我们知道,wait()和waitpid()都是进程等待的函数,那么为什么要进行进程等待呢?进程等待的必要性子进程退出时,父进程如果不管不顾,那么子进程就会变成僵尸进程,造成内存泄漏如果进程变成僵尸进程,那么连kill -9都无法干掉进程,因为谁都无法杀死一个1已经退出的进程这是因为子进程需要保存自己的进程状态,需要告诉父进程你交给我的任务完成的怎么样了,而这些信息就保存在PCB中,...原创 2019-08-15 12:24:28 · 248 阅读 · 0 评论 -
浏览器中输入URL之后,发生了什么
整体大概流程域名解析->发起TCP的三次握手->建立TCP连接后发起http请求->服务器响应http请求,浏览器得到html代码->浏览器解析html代码,并请求html代码中的资源->浏览器对页面进行渲染呈现给用户首先,你在浏览器里输入一个地址之后1.解析URL 首先浏览器会检测这个url是否正确存在,如果不合法,将会返回一个默认的搜...原创 2019-08-20 15:21:42 · 275 阅读 · 0 评论 -
select、poll、epoll的优缺点及底层实现
select模型select优点select缺点poll模型poll优点poll缺点epoll模型epoll优点epoll缺点首先我们要知道,这三种都是IO多路转接模型什么叫IO多路转接所谓IO多路转接模型,就是指对大量描述符进行监控,大量描述符中有我们所关心的描述符就绪了,则调用返回,并且告诉哪些进程就绪了select模型int sel...原创 2019-08-20 16:17:04 · 1112 阅读 · 0 评论 -
进程间通信
什么叫IPC其实就是操作系统为用户提供的进程间通信的方式操作系统为什么要给用户提供进程间通信呢?这是因为进程之间的独立性,每个进程独享一份代码空间和内存地址那么为什么要提供多种IPC呢这是为了应对不同的场景IPC的本质其实就是一块共享的内存区域进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程...原创 2019-08-15 15:27:21 · 89 阅读 · 0 评论 -
详解IPC中的管道和共享内存
管道分类:命名管道和匿名管道命名管道:可以用于本机上的任意进程间通信 匿名管道:只适用于拥有亲缘关系的进程间通信本质:是内核中开辟的一块缓冲区特性:读写特性:当一个进程读或者写时,其他进程不能读或者写 自带同步与互斥 半双工通信:数据只能向一段发送数据,若要双方通信,则要使用两个管道 提供字节流服务 生命周期随进程匿名管道原型int pipe(int fd...原创 2019-08-15 17:20:14 · 252 阅读 · 0 评论 -
进程和线程的区别
进程和线程的区别进程,是计算机中的程序关于某数据集合上的一次活动运行,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。他的执行需要系统分配资源创建实体之后,才能进行。Linux中的线程不是真正的线程,Linux中的线程是轻量级进程1).二者的相同点在系统层面,二者具有的状态都非常相似,所以在多任务程序中,子进程(子线程)的调度一般与父进程(父线程)平等竞争。2).实现...原创 2019-08-12 15:39:34 · 78 阅读 · 0 评论 -
信号
信号概念信号就是用来通知打断当前操作,告诉他某件事情发生了,去做另一件事信号的实质PCB表中的两个位图和指针数组这两个位图是 blocked 阻塞位图 pending 未决位图 handler 信号递达指针在这之前,我们需要了解一下什么叫信号的递达,信号的未决,信号的阻塞信号的递达就是对信号进程处理 信号的未决就是指信号从产生到递达的过程就叫未决 信号的阻塞不是指信号等...原创 2019-08-16 10:23:27 · 91 阅读 · 0 评论 -
线程
Linux下的线程是用PCB模拟实现的,因此Linux下的线程又称为轻量级进程,同一个进程下的所有线程共享进程下的大部分资源线程概念在一个程序里的一个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟...原创 2019-08-16 15:17:41 · 106 阅读 · 0 评论 -
线程控制
我们首先要知道Linux下没有真正的线程,Linux下的线程其实是轻量级进程,所以系统也没有为我们提供创建线程的相关接口,但是有大佬帮我们封装了一套 thread 库,使用时直接include<pthread.h> ,在使用时也需要-lpthread 链接库线程控制1.创建线程//功能:创建一个新的线程//原型int pthread_create(pthread_...原创 2019-08-16 19:44:59 · 90 阅读 · 0 评论 -
线程间的同步与互斥
进程线程中的互斥需要临界资源:多线程共享的资源流就是临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成互斥锁mutex大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,...原创 2019-08-17 08:27:37 · 397 阅读 · 0 评论 -
死锁的产生与预防
死锁在多线程中,为了保证线程安全,我们会使用互斥锁,在某些进程或者线程中,使用了某些资源,为了完成任务,需要请求某些进程或线程所拥有的资源,从而形成了永久性等待状态死锁产生的四个必要条件1.互斥条件:一个资源每次只能被一个执行流执行2.请求与保持:一个资源想要获取资源时阻塞,不会释放已有资源3.不可剥夺条件:一个执行流获取资源后,在未使用完前,不能强行剥夺4.环路等待条件:...原创 2019-08-17 08:48:41 · 105 阅读 · 0 评论 -
生产者与消费者模型
我在在使用条件变量的时候,如果有很多线程等待在同一个条件变量上,那么当条件满足的时候,唤醒的可能不是我们需要的那个线程,所以我们应该让不同的角色等待在不同的条件变量上,区分唤醒生产者与消费者模型生产者与消费者模型不属于23中设计模型中的一种,它只是一种编程的思想简明来说,所谓生产者与消费者模型其实就是两种角色,三种关系在生产者与消费者中保证这三种关系的实现,才能保证数据的安全...原创 2019-08-17 10:50:31 · 123 阅读 · 0 评论 -
线程池及模拟实现
线程池一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量线程池的应用场景1.需要大量的线程来完成任务,且完成任务的事件比...原创 2019-08-17 14:39:45 · 171 阅读 · 0 评论 -
设计模式----单例模式
设计模式大佬们提供的一些面对经典的常见场景,所给定的一些对应的解决方案单例模式特点比如说,某些类,就只能拥有一个对象实现方式懒汉模式在需要用到这个对象时再实例化出对象懒汉模式的核心思想就是“延时加载”,从而能够优化服务器的启动速度实现template <typename T>class Singleton { static T* inst;...原创 2019-08-17 14:56:37 · 90 阅读 · 0 评论 -
一键升级你的g++版本到7.3
使用 devtool 升级 g++ 到 7.3 版本 以下命令在 root 下使用 yum install centos-release-scl -y yum install devtoolset-7 -y 以下命令添加在 bashrc 中 source /opt/rh/devtoolset-7/enable 要是有人不知道bashrc文件是什么在你的home目...原创 2019-08-28 17:23:22 · 253 阅读 · 0 评论 -
服务器出现了大量TIME_WAIT状态而引起bind失败的解决方法
原因首先,我们要知道一件事,每件事情的产生都有其原因,我们要从它的原因入手,因为是服务端出现了TIME_WAIT状态,这个状态只会出现在主动关闭连接的一方,说明服务器清理了大批不活跃用户,想想如果不清理的话,它们一直占用着资源,对服务器的负担是相当大的,短时间内服务器有大量请求,同时也会清理一大批不活跃用户,所以才会出现大量的TIME_WAIT状态,而在TIME_WAIT状态时地址和端口还是...原创 2019-08-20 10:06:27 · 757 阅读 · 0 评论 -
HTTP长连接,短链接,持久连接的区别
什么是Http长连接长连接定义:client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在。此种方式常用于P2P点对点的通信。长连接的操作步骤是:建立连接——数据传输...(保持连接)...数据传输——关闭连接长连接适用场景:监控系统:后台硬件热插拔、LED、温度、电压发生变化;即时通信系统:其它用户登录、发送信息;即时报价...转载 2019-08-20 09:05:01 · 2158 阅读 · 0 评论 -
一键将你的Vim打造成C++ IDE
前一段时间为了打造给我的vim增加功能,发现很多博客都写得很乱,完全不告诉这样做的原因,后来,我找到了一个项目,完全傻瓜式操作,脚本服务,一键OK,而且功能强大,所以特来推荐一下,下面附上链接https://gitee.com/HGtz2222/VimForCpp?tdsourcetag=s_pctim_aiomsg...转载 2019-08-10 15:55:01 · 1923 阅读 · 1 评论 -
Linux下的重要目录
Linux下一些重要的目录首先,我们要知道,Linux是一个开放的操作系统,磁盘上的文件和目录被组成一颗目录树,每个节点都是目录或文件,如果每个人都想要针对自己的习惯去配置文件放置的目录,就会造成很多的困扰,于是,这就有了Filesystem Hierarchy Standard(FHS)标准这个标准并没有规定我们所有的文件应该放在哪里,这是规定了一些大致的方向,于是就有了一些Linux中...原创 2019-03-30 20:34:26 · 197 阅读 · 0 评论 -
操作系统——进程
操作系统首先我先谈一下我关于操作系统的理解,操作系统本身就是一个比较大的进程,他对下负责管理计算机的软硬件以及为软件提供良好的运行环境,对上和用户进行交互。用户通过shell命令操作系统调用接口,系统调用接口又连接着操作接口,操作接口下则是驱动软件,驱动软件负责调用系统的各种硬件。所谓的操作系统,就是用户和内核之间的一层壳,因为用户直接使用内核可能会发生各种不可预料的事情,这才有了操作...原创 2019-03-31 18:15:03 · 484 阅读 · 1 评论 -
操作系统的内存管理
在早期的计算机中,程序是直接运行在物理内存上的,也就是说,程序在运行时所访问的地址都是物理内存。当然,如果计算机同时只运行一个程序,那么只要程序要求内存空间不要超过物理内存的大小,就不会有问题。但事实上为了更有效地利用硬件资源,我们必须同时运行多个程序,正如多道程序、分时系统和多任务一样,当我们能同时运行多个程序时,CPU地利用率将会比较高,那么,如何将计算机上有限地物理内存分配给多个程...原创 2019-07-17 16:20:51 · 250 阅读 · 0 评论 -
深入分析父子线程、进程终止顺序不同产生的结果
一、线程Linux线程创建函数为pthread_create(),默认规则是谁创建子线程,谁就要负责子线程的资源回收,当父线程退出后,子线程也随着退出。所以,一般情况下,父线程退出时都要确保子线程已经退出,所以会使用pthread_join()函数阻塞等待子线程的退出信号/标识。pthread_detach(threadid)函数的功能是使线程ID为threadid的线程处于分离状态(可以为非...原创 2019-08-08 17:37:33 · 604 阅读 · 0 评论 -
CloudBackUp
项目介绍该项目可以完成对一个指定目录下的文件进行监控,并将数据上传到云服务器上进行备份和下载功能。1. 客户端对指定目录进行监控,对每个文件生成etag信息,鉴别是否需要备份 2. 客户端将需要备份的文件基于http协议的PUT请求上传到服务器端 3. 服务端对于PUT上传的文件进行备份到指定目录下 4.服务端对于热度较低的文件进行压缩存储,并在文件被请求时进行解压缩处理5...原创 2019-08-08 18:24:40 · 405 阅读 · 0 评论 -
TCP/IP四层模型和OSI七层模型的概念
TCP/IP四层模型TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。 TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SM...原创 2019-08-19 09:27:46 · 1187 阅读 · 0 评论 -
主机字节序和网络字节序的相互转换
什么叫做字节序CPU在内存中对数据进行存储的顺序对于大于一个字节的类型:long、double、float、int、short的存储主机字节序主机字节序分为大端字节序和小端字节序大端字节序:低地址存高位小端字节序:低地址存地位这样做在没有进行网络通信时各有各的好处,但是在进行网络通信时,就会造成数据二义性问题如何查看自己的主机是大端字节序还是小端字节序很简单...原创 2019-08-19 10:13:14 · 606 阅读 · 0 评论 -
Linux基础命令总结
基本的操作命令目录命令ls 默认列出当前目录下文件pwd 打印当前所在路径mkdir 创建目录rmdir 删除一个空目录,很少使用rm 同样是删除一个目录,但需要加上 -r 选项cp 拷贝文件mv 移动文件cd 切换工作目录文件命令touch 更新一个文件的最新信息cat 顺序打印tac 逆序打印more 按页显示less 作用与more...原创 2019-08-09 21:08:49 · 181 阅读 · 0 评论 -
Huffman树实现文件的压缩与解压缩
Huffman树的概念Huffman树是由n个带权叶子节点构成的所有二叉树中带权路径长度最短的二叉树。节点的带权路径长度树根到某一节点的路径长度与该节点的权的乘积。树的带权路径长度树的带权路径长度为树中从根节点到所有叶子节点的各个带权路径长度之和。Huffman树的构造步骤:初始化:将给定的节点都看作根节点,构成森林。找最小树:在森林中选出两棵根节点的权值最小的二叉树...原创 2019-08-09 21:19:11 · 291 阅读 · 0 评论 -
Linux下常用工具
先贴一个链接,可以快速一键将你的vim打造成功能强大的IDE ,全小白操作https://gitee.com/HGtz2222/VimForCpp?tdsourcetag=s_pctim_aiomsg在Linux操作系统中,我们使用yum来安装工具,这里我只说几个最常用的指令yum install package1 安装指定的安装包package1yum update pac...原创 2019-08-10 08:39:09 · 108 阅读 · 0 评论 -
网络编程套接字
socket常用API// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服务器) int bind(int socket, const struct sockaddr *address, socklen_t addre...原创 2019-08-19 19:09:30 · 101 阅读 · 0 评论 -
详解TCP三次握手和四次挥手
先画出整体流程图,以及每一步发生变化时所调用的socket API三次握手第一次握手:客户端发送位码为syn = 1,随机产生seq number = 10001的数据包到服务器,此时服务端由SYN = 1知道,客户端此时要求建立连接,此时客户端的状态为SYN_SENT第二次握手:服务端收到请求后要确认连接信息,向客户端发送ack number = (客户端的seq + 1),...原创 2019-08-19 21:08:06 · 179 阅读 · 0 评论 -
HTTP协议格式
URL平时我们所说的网址,就是URL,网址:http://www.baidu.com:80/s? 统一资源定位符 (URL)URL协议名://用户名:密码@服务器地址:端口/资源路径?查询字符串#片段标识符为什么' + ' 使用' 2b '表示?因为http协议中特殊字符一般都有特殊含义,不能随意使用,如果查询字符串中也有特殊字符,这样将造成http...原创 2019-08-19 21:45:54 · 189 阅读 · 0 评论 -
fork()之后,发生了什么?
我们都知道,在Linux中调用fork()函数,会创建一个子进程,那么在创建这个子进程的过程中,发生了些什么事情?首先,我们要知道,fork()函数其实是调用发起_fork()系统调用,控制权由用户态转为内核态,内核会分配新的内存块和内核数据结构给子进程(也就是PCB task_struct结构体),然后内核会将父进程的部分数据内容以二进制形式拷贝到子进程,下来再将所谓的子进...原创 2019-08-14 20:58:11 · 1334 阅读 · 0 评论 -
HTTP请求中GET和POST的区别
HTTP定义了与服务器不同的交互方法,其中最基本的五种:GET,POST,DELETE,HEAD,PUT其中GET和HEAD被成为安全方法,因为使用GET和HEAD请求不会产生什么动作,也就意味着这两个请求动作不会在服务器上产生任何结果,这个安全动作并不是指不会做任何动作,而是指不会修改信息它们的底层其实都是基于TCP完成的,只不过HTTP协议给他们贴上了不同的标签,但其实底层实现都是一样...原创 2019-08-20 08:47:37 · 98 阅读 · 0 评论 -
Linux - PCB task_struct结构体
task_struct的结构描述1. 进程状态(州)进程执行时,它会根据具体情况改变状态。进程状态是调度和对换的依据.Linux中的进程主要有如下状态,如表4.1所示。 内核表示 含义 TASK_RUNNING 可运行 TASK_INTERRUPTIBLE 可中断...转载 2018-11-14 23:12:45 · 266 阅读 · 0 评论