
网络编程
文章平均质量分 82
z_ryan
这个作者很懒,什么都没留下…
展开
-
进程那些事
1、进程与程序的区别 程序,是指编译好的二进制文件,是静态的。在磁盘上,不占用系统资源例如:cpu,内存等。 进程,是一个抽象的概念,与操作系统原理紧密相关。进程是活跃的程序,占用系统资源。在内存中执行。包括了动态创建、调度和消亡的整个过程。一旦程序运行起来就会产生一个进程。在linux中,通过进程控制块来描述进程。例如:当我们编写一个c程序并将其编译之后,此时可执行的二进制文件并不能原创 2018-01-21 22:58:00 · 1293 阅读 · 0 评论 -
两种高效的并发模式
前言 我们都知道,并发编程的目的是让程序“同时”执行多个任务,提高效率。当一个程序是计算密集型的时,并发编程并没有优势,反而由于任务的切换时效率降低。但是,当一个程序是IO密集型时,采用并发编程会极大地提高cpu的利用率。因为IO操作的速度远远小于cpu的计算速度,所以让程序阻塞与IO操作上会浪费大量的CPU时间。而并发编程可以让阻塞于IO操作的线程主动放弃CPU,将执行权转移到其他线程。 ...原创 2018-07-06 18:38:58 · 2629 阅读 · 0 评论 -
Linux网络编程--两种高效的事件处理模式
前言 今天,我们主要介绍一下网络设计模式中的两种事件处理模式,Reactor和Proactor模式。通常使用同步I/O模型(select,poll,epoll等)用来实现Reactor模式,而异步(aio_read或aio_write等)用来实现Proactor模式,不过还可以使用同步来模拟Proactor模式。Reactor模式设计思路 主线程(I/O处理单元)只负责对I...原创 2018-07-04 18:14:52 · 2404 阅读 · 0 评论 -
浅析dup()和dup2()函数
前言 在linux下,一切皆文件。当文件被打开时,会返回文件描述符用于操作该文件,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2);)0表示标准输入,1表示标准输出,2表示标准错误。一个进程当前有哪些打开的文件描述符可以通过/proc/进程ID/fd目录查看。 今天,我们主要说两个用于复制文件描述符的函数dup()和dup2()。dup()、dup2()函数...原创 2018-06-29 09:05:24 · 13192 阅读 · 1 评论 -
IO复用的总结及一些问题
在前面的文章中,分别介绍了常用的三种实现IO多路复用的函数:select、poll、epoll今天对主要是对这三个函数的总结,以及对一些io复用的问题的总结。总结 系统调用 select poll epoll 事件集合 用户通过3个参数(readset、writeset,exceptset)分别传入感兴趣的可读、可写及异常等事件,内核通过对这些参数...原创 2018-07-04 12:33:18 · 2037 阅读 · 0 评论 -
IO复用(epoll)
在前面的文章中讲了实现IO复用的两种方式:select和poll。今天主要讲一个更为高效的函数epoll。epoll epoll能显著提高在大量链接中,只有少量活跃连接时的cpu利用率。因为,首先epoll可以复用监听的文件描述符集合,而不用每次在等待事件之前重新准备被监听的文件描述符集合。其次是因为epoll获取就绪事件时,不用遍历整个监听事件的集合,而是只需要遍历那些被内核I...原创 2018-07-03 23:47:03 · 1075 阅读 · 0 评论 -
I/O复用(poll)
上文说到的实现IO复用的函数中的select,本文接着介绍第二种poll。poll Poll相对于select来说突破了监听的文件描述符上限1024,最大文件描述符是系统所能允许的最大值,可以通过查看proc/sys/fs/file-max文件查看,这个值也可以改(通过limits.conf)。另一方面是实现了监听和就绪事件的分离。其他和select类似,也是在指定时间内轮询一定数量...原创 2018-07-02 21:27:05 · 2406 阅读 · 1 评论 -
I/O多路复用(select)
在之前写过一篇五种I/O模型,感兴趣的可以去看一下,今天主要讲其中的一种,那就是I/O多路复用。因为I/O多路复用可以使一个进程同时处理多个连接。这对提高程序的性能至关重要。对于IO复用的概念与理解在上文说的挺清楚了。本文主要说实现IO复用的系统调用。 在linux下,实现IO复用的系统调用主要有三个:select、poll 和 epoll,下面我们将对其进行逐一讲解。selec...原创 2018-07-02 21:18:47 · 5270 阅读 · 5 评论 -
linux五种IO模型
为了更好的理解五种IO模型,我们先来说一下几个概念:同步,异步,阻塞和非阻塞。同步和异步 这两个概念与消息的通知机制有关。同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。比如,调用readfrom系统调用时,必须等待IO操作完成才返回。 异步 异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个...原创 2018-07-01 12:43:36 · 14426 阅读 · 2 评论 -
frok 与 vfork
一、首先看一个程序:#include <stdio.h>#include <sys/wait.h>#include <unistd.h>Int main(){Int i = 0;For(i = 0 ; i < 2 ; i++){Fork();Printf(“-”);}Wait(NULL);Wait(NULL);Retur...原创 2018-06-25 19:04:40 · 1243 阅读 · 0 评论 -
部分重要的SOCKET选项
首先介绍两个专门用来读取和设置socket文件描述符属性的系统调用getsockopt() &amp;amp;&amp;amp; setsockopt()函数原形://读取socket文件描述符的属性int getsockopt(int sockfd , int level , int option_name , void* option_value , socklen_t* rest...原创 2018-05-28 17:58:05 · 1087 阅读 · 0 评论 -
线程控制原语小结
在本篇博客中主要总结一下linux下,线程的一些控制原语。 在Linux环境下,所有线程特点,失败均直接返回错误号。所以我们可以利用strerror()将错误信号所代表的具体错误打印出来。参数为发生错误所返回的错误信号。例如: ret = pthread_create(&tid ,NULL ,thrd_func ,NULL);if(ret != 0){ fpri...原创 2018-03-20 21:39:53 · 1315 阅读 · 0 评论 -
大小端及网络字节序
什么是大端模式、小端模式 “大端”和”小端”表示多字节值的哪一端存储在该值的起始地址处;小端存储在起始地址处,即是小端字节序;大端存储在起始地址处,即是大端字节序;具体的说: ①大端字节序(Big Endian):最高有效位存于最低内存地址处,最低有效位存于最高内存处; ②小端字节序(Little Endian):最高有效位存于最高内存地址,最低有效位存于最低内存处。原创 2018-01-22 23:58:21 · 30709 阅读 · 7 评论 -
信号
1、概念 提及信号我们首先想到的是什么?有人想到赛场上裁判的信号枪,有人想到路口的红绿灯……;信号在我们生活中随处可见。在计算机中,信号是信息的载体,Linux/UNIX 环境下,古老、经典的通信方式, 现下依然是主要的通信手段。在这篇文章中我们就主要聊聊信号。基本属性 信号的基本属性可以总结为两方面,即:软中断和时延性。 例如:A给B发送信号,B收到信号之前执行自己的代原创 2018-01-22 18:23:41 · 2503 阅读 · 1 评论 -
网络编程的三个重要信号(SIGHUP ,SIGPIPE,SIGURG)
对于信号的介绍,我再前面的一篇博客中做过专门的总结,感兴趣的可以看看。本文主要介绍在网络编程中几个密切相关的函数:SIGUP,SIGPIPE,SIGURG。SIGHUP信号 在介绍SIGHUP信号之前,先来了解两个概念:进程组和会话。进程组 进程组就是一系列相互关联的进程集合,系统中的每一个进程也必须从属于某一个进程组;每个进程组中都会有一个唯一的 ID(process...原创 2018-07-07 16:25:19 · 47124 阅读 · 3 评论