一、五种IO模型

1、 阻塞I/O

(eg:钓鱼者(王一)只钓鱼,不和任何人说话,也不干任何其他的事)

2、非阻塞I/O

(eg:钓鱼者(王二)一边钓鱼,一边问王一到底钓了多少鱼,但是王一并没有回答他,但他还是会一边钓他的鱼一边重复的问王一)

3、 信号驱动I/O(SIGIO)

(eg:钓鱼者(王三)他在自己的鱼竿上绑了一个铃铛(相当于一个信号),然后去旁边看手机去了,当铃铛响后,它会把鱼钓上来)

4、 I/O复用(select poll和e poll)

(eg:钓鱼者(王四)他拉了一车鱼竿来钓鱼,同时看着这么多鱼竿)(多路转接)

5、异步I/O(Posix.1的aio_系列函数(aio_read))

(eg:钓鱼者(王五),让自己的司机去钓鱼,然后自己去做别的事情了,并让司机把鱼钓好之后给他放到指定位置并给他打电话然后他把鱼领走)

1、在大部分场景下,若出现性能问题首先考虑是否出现I/O异常
2、在网络当中进行I/O读写时,I/O的读写条件不一定就绪(读写成功依赖于读写条件)
3、站在用户的角度,I/O分两步完成(a、等事件就绪 b、真正的处理数据I/O)
4、I/O性能的瓶颈主要是在等待上花费了太多时间,
5、为了能提高I/O性能,应该改善等的比重(尽可能缩短等的时间)

二、什么是高级IO

  1. 非阻塞IO
  2. 记录锁
  3. 系统V流机制
  4. I/O多路转接(select/poll)
  5. readv和writev函数以及存储映射IO(mmap)
    以上的这些统称为高级IO。

三、pipe 与 socketpair

pipe用来创建管道,但是单个管道只能单向通信,一端用于读,而另一端用于写。如果要实现进程双向通信,必须创建一对管道。而socketpair 则可以用来创建双向通信的管道。



socketpair 成功返回0,失败返回-1

四、代码实现

Makefile文件:1 sockpair : sockpair.c2     gcc  -o $@ $^3 .PHONY:clean4 clean:5     rm -f sockpair 
  1 #include<stdio.h>2 #include<sys/socket.h>3 #include<stdlib.h>4 #include<sys/types.h>                                                       5 #include<string.h>6 int main()7 {8     int sv[2];9     int sockpair = socketpair(AF_UNIX , SOCK_STREAM , 0 , sv);10     if(sockpair < 0)11     {12       perror("socketpair");13       return 1;14     }15     pid_t id = fork();16     if(id < 0)17     {18         perror("fork");19         return 3;20     }21     else if( id == 0)22     {23         //child
24         char buf[1024];25         close(sv[0]);26         while(1)27         {28             memset(buf , 0 , sizeof(buf));29             strcpy(buf , "I am your child!\n");30             write(sv[1] , buf , strlen(buf));31             printf("chlid#");32             read(sv[1] , buf , sizeof(buf)-1);33             sleep(1);34         printf("%s",buf);35         }36             37     }38     else39     {40         //father41         close(sv[1]);42         char buf[1024];43         while(1)44         {45             memset(buf , 0 , sizeof(buf));46             printf("father#");47             read(sv[0] , buf , sizeof(buf)-1);48             printf("%s",buf);49             strcpy(buf , "I am you father!\n");50             write(sv[0] , buf , strlen(buf));51         }52     }53     return 0;54 }        

五、结果展示

socketpair(双向通信)--高级IO相关推荐

  1. 高级IO(一)--UNIX环境高级编程读书笔记

    在前面学习了文件IO,标准IO和终端IO,现在学习高级IO,UNIX中怎么有这么多的IO. 1.非阻塞IO 可以将系统调用分为两类:低速系统调用和其他.低速系统调用是可能会使进程永远阻塞的一类系统调用 ...

  2. Unix环境高级编程-高级IO

    高级IO 非阻塞IO -- 对比阻塞IO 非阻塞:能做就做,不能做也不等待 因为速度不匹配,有些IO函数会出现假错, 不是因为函数报错,而是阻塞IO在读取或者写入的时候速度太慢.有限状态机编程思想 1 ...

  3. java之十 高级IO流

    视频课堂:https://edu.csdn.net/course/play/8222 java.io定义的输入/输出类列于下表: ObjectInputStream.GetField和ObjectOu ...

  4. Linux之高级IO

    目录 一.五种IO模型 以网络为例 什么叫做IO? 什么叫做高效的IO呢? 为什么第二个大爷的效率很高呢? 五种IO模型 感性认识 这五个人,在钓鱼的时候,谁的效率是最高的? 阻塞IO 非阻塞IO 信 ...

  5. 五种高级IO | select poll epoll 水平触发模式 边缘触发模式 惊群问题

    一.高级IO 在介绍多路复用IO之前,先介绍一下其它四种高级IO: 阻塞IO: 在内核将数据准备好之前,系统调用会一直等待.所以的套集字默认是阻塞方式. 非阻塞IO: 在内核还未将数据准备好,则系统调 ...

  6. 【Linux练习生】高级IO

    本文收录于专栏:Linux 关注作者,持续阅读作者的文章,学习更多知识! https://blog.csdn.net/weixin_53306029?spm=1001.2014.3001.5343 高 ...

  7. 高级 IO(非阻塞、多路复用、异步、存储映射、文件锁)

    目录 非阻塞I/O 阻塞I/O 与非阻塞I/O 读文件 阻塞I/O 的优点与缺点 使用非阻塞I/O实现并发读取 I/O 多路复用 何为I/O多路复用 select()函数 poll()函数 总结 异步 ...

  8. android socket双向,Android中socketpair双向通信详解

    Android很多地方会涉及到进程间的通信,比如输入系统,那么进程间通信会涉及哪些内容呢? 1.进程:负责读取和分发事件 2.应用程序:负责处理输入事件 上面这两个进程会涉及哪些双向通信呢: 1.进程 ...

  9. Java 高级—— IO 基础

    一.File 类 先看一下File 类的定义 [java] view plaincopy public class File extends Object implements Serizliable ...

最新文章

  1. js base64编码解码 btoa atob 函数简介
  2. [《孔雀》观后]聪明的孩子提着易碎的灯笼
  3. 对html5的了解,HTML5——对HTML5的认识
  4. July 4th Links: ASP.NET, ASP.NET AJAX, Visual Studio, Silverlight and IIS7
  5. 怎样配置键盘最方便,以及一些设计的思考
  6. ubuntu 14.04中文显示乱码问题
  7. 使用js 调用 google ads
  8. Spring学习之旅(二):Bean的高级装配之解决装配歧义性
  9. IList对象排序算法
  10. 夺命雷公狗---node.js---21之项目的构建在node+express+mongo的博客项目6之数据的遍历...
  11. 如何删除oracle软件,如何用静默方式删除oracle软件
  12. hdu 1004(排序+统计)
  13. 简单的 socket 代码
  14. 直播http-flv原理
  15. 无线路由桥接关掉服务器要怎么办,路由器设置无线桥接后不能登录副路由器怎么办?...
  16. 解答,修正(JAVA+=运算程序诡异事件 )
  17. 默纳克系统电梯服务器怎么封超载,默纳克电梯系统故障代码.pdf
  18. 软件开发人员如何做出好看的UI界面
  19. 《1024伐木累》-小白篇之开发网站,三天!(结束篇)-总章节十三
  20. android bp文件_Android 基础 | Android.bp 语法浅析

热门文章

  1. 西南交大南京理工计算机考研,盘点211院校实力强势学科 理工类考研千万不要错过!...
  2. .NET超市管理系统
  3. SQL中的三种去重方法
  4. AI养猪,国标GB28181协议视频平台EasyGBS流媒体服务器携手RTMP流媒体服务器EasyDSS协同打造智慧养殖生态圈
  5. 参展动态 | 璞华受邀出席第七届电气化交通前沿技术论坛展会
  6. 上城区餐饮油污加大整治,环境污染攻坚克难
  7. iOS 警告消除(记录贴)
  8. logback.xml中additivity的使用
  9. linux 块设备 dm,Linux块设备加密之dm-crypt分析
  10. unity c# 制作英雄 卡牌 循环滚动列表