linux
spring_hui123
本人新浪博客地址 http://blog.sina.com.cn/u/5551884115
内容无特殊说明均为原创,欢迎转载分享知识,因本人尚且属于学习阶段,因此博文中可能会出现错误的知识,如有前辈发现错误请及时指出,不胜感激!
展开
-
linux下的僵死进程
1.僵死进程是什么?linux下每个进程都有进程号,在进程结束的时候,调用了exit,进程其实并未完全死亡,它会遗留一些少量的信息,例如进程号,进程开始时间等,我们称之为进程的尸体,最后这些尸体由系统回收,释放出被占用的进程号。这是进程结束的大概流程。我们知道有父子进程的概念,例如通过fork函数,可以创造出一个子进程来,每个子进程在结束时会给父进程发出一个信号,这个信号为sigc原创 2017-10-07 18:25:02 · 310 阅读 · 0 评论 -
I/O复用---select
I/O复用也是提高服务器性能的一种非常高效的方式,它的原理是什么呢? 我们知道服务器在 接受新的客户端链接,接受已连接客户端发来的数据 等事情上不总是连续的,持续的。假如 一个服务器不使用多线程编程的话,只用一个main线程只能做到和一个客户端链接,接受数据。然而这个客户端只 和服务器链接一次,并且发送数据也不是特别频繁,特别持续的。那么这个服务器可以说是大部分时间在无谓的等待客户端...原创 2018-02-09 16:54:19 · 345 阅读 · 0 评论 -
线程池网络编程
多线程编程中,每有一个新连接时就会创建一个新的线程去维护连接进行收发数据,但是这会有一个问题,就是频繁的线程创造结束会使系统内核的负担加重,对于执行任务的效率也相对低下,因为还要多出创造线程的时间。 那么如何提高效率,减轻内核的负担呢?我们知道主要原因是由于频繁的创建线程。想要改善效率 不可能选择不创建线程。那只能让线程创建的时间提前,并且不会频繁的再结束再创建。因此就有了线程池的提出。 线...原创 2018-02-09 16:53:46 · 449 阅读 · 0 评论 -
多进程网络编程
本文概述如何使 服务器同时 连接处理 客户端们。 即服务器的一个进程只负责接受 请求连接的客户端。而具体如何跟各个客户端发送数据交给自己创造的子进程去完成。 用TCP协议来举例。 服务器在创造套接字,并用套接字创建监听队列后,陷入循环,循环里负责的是只要accept接受到了客户端的链接,就会fork出一个子进程,子进程里和客户端去具体的send recv。而父进...原创 2018-02-09 16:52:28 · 373 阅读 · 0 评论 -
IPV4报头及IP分片
IP协议是无连接,不可靠,无状态的。无连接就是指通讯时不能长久的维持对方信息,保持连接。不可靠就是不能保证数据准确的发送给接受方,可能会丢失,变错,截断等。无状态就是指发送的数据可能是乱序的重复的。至于为什么IP协议的特性是这样的。为什么TCP协议又是有连接的,可靠的,无状态的。那就得从控制协议的报头段来分析原因了。不同的协议,不同的报头,因此表现出来的特性也是区别很大的。IPv4的报头示意图是这...原创 2018-02-09 16:51:45 · 6388 阅读 · 1 评论 -
网络编程 TCP
网络编程的传输层协议一般分为UDP和TCP 其中TCP协议是面向连接的,可靠的,流式服务的协议。简而言之就是安全性完整性更高的,但效率低于UDP的协议。 本文将重点涉及linux下具体的采取TCP协议的网络编程代码实现。 首先最基本的要有两份代码,即服务器端和客户端各一份。 服务器端编程流程如下:1.首先要创建一个套接字socket,其本质为文件描述符 Int...原创 2018-02-09 16:50:14 · 292 阅读 · 0 评论 -
线程同步与线程安全
1线程同步 同步:多线程访问临界资源时,必须进行同步控制,多进程或者多线程的执行并不完全是绝对的并行运行,又可能主线程需要等待函数线程的某些条件的发生。 多线程的临界资源有全局数据,堆区数据,文件描述符 同步控制方式: 1.1信号量 需要用到头文件semaphore.h 获取: int sem_init(sem_t *sem,int pshared...原创 2018-02-09 16:47:32 · 4746 阅读 · 0 评论 -
线程
线程是什么 线程是进程内部的一条执行序列(执行流),每个进程至少有一条执行序列:main的执行体。进程可以通过线程库创建N条线程,新建的线程为函数线程,main是主线程。虽然感觉是进程包含着线程,进程由线程组成,但是进程提出的概念比线程概念要早。 线程与进程的区别 1.进程是资源分配的最小单位,线程是CPU调度的最小单位。 2.线程是轻量级的进程 3.管理方式不一样。进程是pcb管理...原创 2018-02-09 16:47:09 · 276 阅读 · 0 评论 -
进程通讯(五)--共享内存
共享内存就是俩进程共同拥有的内存,一般执行一个程序,会给内存上分配该进程的空间吧。 如果两个进程有一部分是使用共享内存,那么这俩进程其他部分会各自分配自己的内存空间,而使用共享内存的地方只会分配一个共有的内存空间,也就是说这部分共享内存空间都属于这两个进程,这部分空间对于这俩进程来说都是自己的。共享内存本身不难理解,使用起来也无非是介绍几种函数,熟悉下用法。和其他IPC比较一下,还是很容易的。...原创 2018-02-09 16:46:43 · 252 阅读 · 0 评论 -
进程通讯(四)--消息队列
消息队列和管道很像。但它比起管道不需要固定进程的只读和只写,通讯间的进程都可以读写,并且支持多个进程。 而消息队列发送的消息 实际是一个消息类型和实际的消息。消息类型是什么?它其实是一个长整型数字,具体多少完全由用户来定义,为的是读消息时可以根据这个类型来调整读取的优先级顺序。 所以说消息队列发送的是数据块,一般发送的消息就定义为以下的结构体。 struct msg{ long type;//...原创 2018-02-09 16:46:21 · 242 阅读 · 0 评论 -
进程通讯(三)--信号量
信号量虽然也是进程通讯的一部分,但比起其他的通讯方式比如管道,消息队列这些直接发送数据的形式不太相同。主要起到控制同步异步的作用。 何为同步异步?听到同步不要因为这个“同”字就联想到俩进程同时运行。恰恰相反,同步往往要求一个进程等待另一个进程而达到协同作用。比如AB俩进程,A进程执行到了某段代码需要 B进程运行返回的数据 ,那么A就会等到了B进程执行直到B返回了A需要的数据时,A才会继续执...原创 2018-02-09 16:45:53 · 247 阅读 · 0 评论 -
进程通讯(二)--无名管道
无名管道是父子进程间的通讯。无名的管道创建使用完全是在内存中。甚至连有名管道要创建的管道文件都没有。 有名管道的管道文件虽然没有大小,但好歹磁盘中有个标记,可以被需通讯的进程们看到共同使用。而无名管道的管道完全隐藏在一个程序的代码中,在进程运行时创建销毁,正是因为这个特点,所以限制了通讯的范围。 无名管道创建打开的函数 int pipe(int fd[2]); 参数其实已经退化...原创 2018-02-09 16:45:27 · 281 阅读 · 0 评论 -
进程通讯(一)--有名管道
进程间通讯的意义很多书上都有说,总之是非常重要的一部分,就不多啰嗦了,简单来说是为了完成进程间的协作功能。 然而进程间的通讯方式也不少,信号,信号量,管道,共享内存..... 今天先来说说管道中的有名管道。当然有有名管道自然也有无名管道。至于他俩的区别,我们暂且记着有名管道是可以让同一台计算机上的任意两个无关系的进程通信。而无名管道则是必须需要通信的进程间存在关系,比如父子进程。 有名管...原创 2018-02-09 16:44:49 · 272 阅读 · 0 评论 -
Linux写实拷贝技术
何为写时拷贝技术?这就得先讲讲linux的分页加载机制。 分页加载机制就是linux把内存划分成很多的小块,进程中的数据按照某种对应关系(页表)放入内存中。 这么做的目的是为了提高内存的使用率。可以不必让一个进程中的所有东西都连着放在一起。 连着放在一起的弊端是。如果A进程释放后。假如A进程使用的内存非常少。其他进程都无法使用A进程占的这块内存,因为它太小了放不下。这样就存在内存利用率低...原创 2018-02-09 16:38:16 · 1209 阅读 · 0 评论 -
浅谈5中io模型和同步io、异步io及R模式P模式
五种io模型: 阻塞io模型 非阻塞io模型 io复用模型 信号驱动io模型 异步io模型 其中阻塞与非阻塞 阻塞io:就是函数调用后,会被挂起,直到内核接受到了io的读写,拷贝到了应用进程的用户态后,函数才返回 非阻塞io:就是函数调用后,立刻返回结果,这个结果告诉调用函数者内核是否接受并完成了io的读写阻塞io 非阻塞io io复用 信号驱动io。这四个都可以认为是同步io...原创 2018-02-09 01:18:38 · 580 阅读 · 0 评论 -
linux下kill命令,kill函数
kill命令是使跟在它后面的进程结束,学习了信号我们知道,它应该是给进程发送了让进程结束的信号才能完成这一功能。如何给进程发送信号呢。这里就要用到kill函数;它的原型如下;int kill(pid_ pid,int signum); 返回值含义:成功0 失败-1 接受者 信号类型kill命令发送的是什么原创 2017-10-07 18:27:40 · 4968 阅读 · 0 评论 -
linux处理僵死进程 及 信号
信号的概念: 系统预先定义好的某些特定事件:可以被发生,也可以被接受。发生和接受的主体都是进程。信号的响应方式有以下几种: 默认0 忽略1 自定义 SIG_DFL SIG_IGN 0 1 可以同过sign原创 2017-10-07 18:26:44 · 469 阅读 · 0 评论 -
select,poll和epoll的区别
Select就是通过监听事件写入到一个32个元素 累计1024位的long数组中(就是fed_sets结构体的内容),用户加入监听位,如果有监听事件发生就会改变位的标志。但这样会有两个缺点,一是监听的数量被限制在了1024(三种事件:可读,可写,异常),而且复杂的位操作,即使提供了多个操作宏,仍会感到编程的繁琐,还有每次调用select(是每次,进入循环后每次使用select前都要做得事)要重新把...原创 2018-02-09 16:59:51 · 398 阅读 · 0 评论