高级I/O
1.阻塞问题的几种解决模型
1.1 非阻塞模型:类似于死循环,需要适当加休眠,防止cpu占用太高;效率较低
1.2 线程异步:效率最高的一种解决方案
1.3 I/O多路转接与复用 select(低) pselect poll(较高) epoll(最高)(linux独有)
select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout))
由系统对文件描述符文件进行监听
参数:nfds:三个文件集里最大文件描述符加1;
readfds:监听的读事件文件描述符集合
writefds:监听的写事件文件描述符集合
exceptfds:意外事件的集合
timeout:超时退出设置,为0时不堵塞,为NULL时无时间限制
注:需要调用以下部分函数来对文件描述符集合来对需要监听的文件进行设置
void FD_CLR(int fd, fd_set *set); //把fd从集合里移除
int FD_ISSET(int fd, fd_set *set);//检查fd是否在集合里
void FD_SET(int fd, fd_set *set); //把fd加到集合里
void FD_ZERO(fd_set *set); //把集合清零
例:fd_set rds; //设置一个描述符集合
FD_ZERO(&rds); //清空集和
FD_SET(fds[0],&rds);//将fds[0]加入到集合中// fds[0]是一个管道的读端
FD_SET(STDIN_FILENO,&rds); //将标准文件输入加入到集合中
ret=select(fds[0]+1,&rds,NULL,NULL,NULL);//返回事件发生个数,没有事件发生则阻塞
注:当事件发生后,发生事件的文件描述符会继续留在sets中,其余被清除。
缺点:1.每次发生会更改集合sets,需要重新设置;
2.是轮询机制,如果文件描述符不连续会导致空循环
效率并不高,和非阻塞模型差不多。
下面两种使运用较多的方案:
1.poll()
2.epoll()
高级I/O的更多相关文章
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- PayPal高级工程总监:读完这100篇论文 就能成大数据高手(附论文下载)
100 open source Big Data architecture papers for data professionals. 读完这100篇论文 就能成大数据高手 作者 白宁超 2016年 ...
- 马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)
马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)目录详情:18_02_ssl协议.openssl及创建私有CA18_03_OpenSSH服务及其相关应用09_01_磁盘及文 ...
- JS高级前端开发群加群说明及如何晋级
JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明: 一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在“前端开发”关键字搜索结果第一名.当然取得这 ...
- C#高级知识点&(ABP框架理论学习高级篇)——白金版
前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...
- Visual Studio 宏的高级用法
因为自 Visual Studio 2012 开始,微软已经取消了对宏的支持,所以本篇文章所述内容只适用于 Visual Studio 2010 或更早期版本的 VS. 在上一篇中,我已经介绍了如何编 ...
- [译]基于GPU的体渲染高级技术之raycasting算法
[译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...
- 高薪诚聘熟悉ABP框架的.NET高级开发工程师(2016年7月28日重发)
招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司-上海运图贸易有限公司 招聘岗位:.NET高级开发工程师工作地点:上海-普陀区 [公司情况]上海运图贸易有限公司,是由易迅网的创始 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- MongoDB高级查询详细
前言 前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客 MongoDB下载安装与简单增删改查 前 ...
随机推荐
- google docker镜像下载
https://anjia0532.github.io/2017/11/15/gcr-io-image-mirror/
- oracle 向表中插入BLOB类型数据
提示: 待插入图片必须保存到oracle主机路径上. 步骤: 1.SYSDBA权限用户创建图片所在目录 CREATE OR REPLACE DIRECTORY TEST_DIR AS 'C:\Pict ...
- 6.44 以元素值为x的节点为根的子树的深度(递归实现)
题目:求二叉树中以元素值为x的节点为根的子树的深度 #include<cstdio> #include<malloc.h> typedef struct btree{ char ...
- Linux中Tomcat 自动设置CATALINA_HOME方法
Linux中Tomcat 自动设置CATALINA_HOME方法 在服务器部署中,我们经常会出现“在一个服务器上运行多个tomcat服务”的情况. 使用如下方法设置,可以无限复制平移扩展Tomcat, ...
- No module named cv2 报错处理
运行python脚本出现“No module named cv2 ”,这时我们安装下opencv-python依赖即可 python3 -m pip install opencv-python
- UML-架构分析-阶段
初始阶段:架构概念验证原型--->确定其可行性 细化阶段:因素表.技术备忘录.SAD(软件架构文档) 移交阶段:可能会修改SAD->确保与最终部署版本的一致性 后续进化循环:重温架构性因素 ...
- Window Mysql5.7免安装版配置
1.下载mysql 5.7 32位:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-win32.zip 5.7 64位:https ...
- salt-stack 安装nginx
init-pkg-install: pkg.installed: - names: - gcc - gcc-c++ - make - autoconf - openssl - openssl-deve ...
- python开源库——h5py快速指南
1. 核心概念 一个HDF5文件是一种存放两类对象的容器:dataset和group. Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,存放dataset和其他group.在使 ...
- 在scala命令行中加入类库
在scala命令行中加入scala的类库. scala -toolcp $HOME/.ivy2/cache/org.scalanlp/breeze_2.12/jars/breeze_2.12-0.13 ...