2 鹤望兰丶

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 30w+

Linux:僵死进程

一、何为僵死进程?一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁, 而是留下一个称为僵死进程的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵死进程,并不能将其完全销毁)。在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等,但是仍然为其保留一定的信息(包括进程号进程PID,退出状态,运行时间等), 直到...

2019-09-09 18:10:20

C/C++:#define宏函数和inline内联函数

1,宏函数宏函数的作用:1)、避免函数调用,提高程序效率常用的就是最大值与最小值的判断函数,由于函数内容并不多,如果定义为函数在调用比较频繁的场合会明显降低程序的效率,其实宏是用空间效率换取了时间效率。如取两个值的最大值:#define MAX(a,b) ((a)<(b) ? (b) : (a))使用宏函数的优点有两个:(1)适用于任何实现了operator<的类型,包括自...

2019-09-09 17:03:08

C/C++:#define与const区别

一:区别(1)就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。(2)就起作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。(3)就存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份;const...

2019-09-09 16:52:57

Linux下的五种I/O模型

一、关于I/O模型的引出我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer。如下图所示:整个请求过程为: 用户进程发起请求,内核接受到请求后,从I/O设备中获取数据到buffer中,再将buffer中的数据copy到用户进程的地址空间,该用户进程获取到数据后再响应客户端。在整个请...

2019-08-28 22:34:09

操作系统:并行和并发

并发(Concurrent),在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个CPU上运行。并发不是真正意义上的“同时进行”,只是CPU把一个时间段划分成几个时间片段(时间区间),然后在这几个时间区间之间来回切换,由于CPU处理的速度非常快,只要时间间隔处理得当,即可让用户感觉是多个应用程序同时在进行。如:打游戏和听音乐两件事情在同一个时间段内都...

2019-08-28 22:19:59

struct结构体内存对齐相关知识

内存对齐的意义结构体中成员按照定义时的顺序依次存储在连续的内存空间。但并不是像数组那样的连续。内存对齐计算内存地址比较方便,内存地址会非常有规律,减小了内存寻址时间。若不对齐,内存地址的变化非常没有规律。cpu把内存当成是一块一块的。块的大小可以是2,4,8,16 个字节,因此CPU在读取内存的时候是一块一块进行读取的,块的大小称为(memory granularity)内存读取粒度。我们...

2019-08-26 00:39:55

sizeof和strlen

strlenstrlen()是函数,用于计算字符串数组的实际长度(到‘\0’结束,不包含‘\0’);strlen只能用于计算char *a或char a[]格式的,不能用于计算string类型1 #include<iostream> 2 using namespace std; 3 void main() 4 { 5 char a[10]; //未初始化,长度不确定 ...

2019-08-23 17:42:14

C语言MYSQL api归纳

mysql_affected_rows()上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。mysql_autocommit()切换 autocommit模式,ON/OFFmysql_change_user()更改打开连接上的用户和数据库。mysql_charset_name()返回用于连接的默认字符集的名称。mysql_close()关闭服务器连接。my...

2019-08-12 17:06:17

进程间通信:消息队列

在Linux中,IPC消息队列是一个双向通信的全内存设计,即内核保证了读写顺序和数据同步,并且是性能比较好的先进先出的数据结构。消息队列的应用场景:比如异步任务处理,抢占式的数据分发,顺序缓存区等。消息队列的产生原因消息队列其实就是消息传输过程中保存消息的容器,既然有了管道,为什么要出现消息队列呢?理由如下:(1)生命周期:匿名管道和命名管道都是随进程的,意味着管道的生命周期是随进程的退出而...

2019-08-06 19:14:00

进程间通信:共享内存

共享内存的通信原理在Linux中,每个进程都有属于自己的进程控制块(PCB)和地址空间(Addr Space),并且都有一个与之对应的页表,负责将进程的虚拟地址与物理地址进行映射,通过内存管理单元(MMU)进行管理。两个不同的虚拟地址通过页表映射到物理空间的同一区域,它们所指向的这块区域即共享内存。特别提醒:共享内存并未提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机...

2019-08-06 17:43:33

进程相关(linux)

进程概念**狭义定义:**进程是正在运行的程序的实例(an instance of a computer program that is being executed)。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程的概念主要有两点:第一,进程是一个实体。每一个进程...

2019-08-06 16:12:20

进程间的通信方式:管道

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、等。其中 Socket和Streams支持不同主机上的两个进程IPC。一、管道的概念管道是一种两个进程间进行单向通信的机制。 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传...

2019-08-04 15:33:36

操作系统:进程间的同步和互斥

临界资源和临界区临界资源:系统中一次只允许一个进程访问的资源。如I/O设备、共享文件、共享变量等。临界区:并发执行的进程中,访问临界资源的必须互斥执行的代码段叫临界区。在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界...

2019-08-03 17:33:17

进程虚拟地址空间

每个程序在被运行起来之后,它将拥有自己独立的虚拟地址空间这个虚拟地址空间的大小由计算机的硬件平台决定,具体是由cpu的位数决定的。比如32位的平台决定了虚拟地址空间位4G。这4G空间的分配如下1 内核空间最上面的1G。内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。2 栈(stack)包括以下内容和用途:1 函...

2019-07-30 21:31:02

C/C++ static关键字用法总结

C/C++static关键字用法总结static若修饰以下时:全局变量 外延性 ,加上static后, 作用域仅限于本文档局部变量 存储位置从栈上变成data段的rw段(未初始化时放在bss段),生命周期跟整个进程的周期一样1,类外1static全局变量static int a;这个变量的含义是在该cpp内有效,但是其他的cpp文件不能访问这个变量;如果有两个cpp文件声明了...

2019-07-30 20:49:25

Nginx内存池源码分析

Nginx内存池Nginx简介Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和...

2019-05-06 21:09:12

排序算法:一

算法算法:解决特定问题的步骤的描述特性:输入:有零个输入或者多个输输出:只有一个或者多个输出有穷型性:算法在执行有限个步骤时,会自动结束而不会陷入无限循环里面确定性:算法的每一步都有确定的含义而不会出现二义性可行性:算法的每一步都可以通过有限次数完成。复杂度算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需...

2018-11-16 22:36:19

文件中单词次数统计

统计文档中的单词出现的次数给定一个.txt文件要去统计出文件长度,文件有多少个单词,每个单词出现的次数,并按照降序输出。思路:定义结构体存放单词和次数读取文件求文件长度判断是否为单词并将单词存入结构体统计每个单词出现次数排序代码如下:#include<stdio.h>#include<assert.h>#include<string.h>...

2018-11-16 22:09:43

C语言入门七

结构体在定义一个变量时 次变量拥有诸多 属性 我们需把属性写进去 则不能用普通的定义变量来定义它 如:在写学生管理系统时 学生具有多种属性 性别 年龄等等这时我们就需要结构体了。定义:struct Student{ char name[10]; int age; char sex[5];}st;注意 结构体内的成员 不能对其进行初始化调用成员:void Show(Stud...

2018-11-06 21:23:57

C语言入门六

递归什么是递归?程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来...

2018-11-06 21:03:53

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。