关于select那点事
select:
通过监视多个文件描述符的数组。当select()返回后 文件描述符便会被内核修改标志位,使进程
能进行后续操作
-----------------------------------------------------------------------
我们知道多进程程序是可以利用到多核的优势的
但是 多进程意味着多倍的开销 和频繁的上下文切换
那么单进程能否达到并发执行的效果呢?
----------------------------------------------------------------
首先我们知道 在io等待的时间 浪费的大部分时间
我们可以这样做
如果客户端发过来一个连接 我服务器端 主线程 会做一个轮询 网络接口文件的文件句柄
发现状态变化 我就跟你建立连接 就会读你发过来的消息 扔到消息堆里
然后我也会一直刷着有没有返回 一有就返回给客户端
其实根本上还是串行的
如果你有幸在富士康做过事情 你也许很轻松就能明白。
如果一条产线 是one by one的做的话 产量不会很高的
但是如果在工人之间放一个储物箱的话 做好放到下一个里面去的 这样就会快很多
核心就是减少等待时间
但是select有个缺陷 当并发变得更大的时候 轮询会变得慢 而且文件句柄 要不断在内核态和
用户态间进行转换 而且会做很多无用功 而且还有最大文件描述符的问题
-----------------------------------------------------------------------------
这个时候 select的升级版 poll来了
但是poll 核心跟select 差不多
只是优化了 文件描述符的问题,但是任然没有解决 开销问题
-----------------------------------------------------------------------
【水平触发】
我们知道 由于select的工作方式 如果select或者pool 将就绪的文件描述符告诉进程的话
如果进没有对其 IO操作 那么 下次轮询还会 在告诉一次 这个就是水平触发 一般都不会丢失
就绪的程序
关于select那点事的更多相关文章
- 用DataBaseMail发图片并茂的邮件
不知道各位的老板有没有这样的要求, 一些系统中的数据需要定时发出邮件提醒, 如呆料就要到期或者一些待办的事项提醒. 当然这些用SSRS报表订阅可以实现,但有些公司没有设定相应的报表服务,又或者只是一些 ...
- 最全的ORACLE-SQL笔记
-- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unloc ...
- oracle erp 表结构
BOM模块常用表结构 表名: bom.bom_bill_of_materials 说明: BOM清单父项目 BILL_SEQUENCE_ID NUMBER 清单序号(关键字)ASSEMBLY_ITEM ...
- ORACLE EBS常用表
http://www.cnblogs.com/quanweiru/archive/2012/09/26/2704628.html call fnd_global.APPS_INITIALIZE(131 ...
- Java NIO Selector选择器
Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是可以管理多个网络链接. 为什么使用S ...
- NIO教程 ——检视阅读
NIO教程 --检视阅读 参考 BIO,NIO,AIO 总结 Java NIO浅析 Java NIO 教程--极客,蓝本 Java NIO 系列教程 --并发编程网 BIO,NIO--知乎 NIO 入 ...
- Matplotlib数据可视化(6):饼图与箱线图
In [1]: from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParam ...
- 容易被忽略的事----sql语句中select语句的执行顺序
关于Sql中Select语句的执行顺序,一直很少注意这个问题,对于关键字的使用也很随意,至于效率问题,因为表中的数据量都不是很大,所以也不是很在意. 今天在一次面试的时候自己见到了,感觉没一点的印象, ...
- (转载) Linux IO模式及 select、poll、epoll详解
注:本文是对众多博客的学习和总结,可能存在理解错误.请带着怀疑的眼光,同时如果有错误希望能指出. 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案 ...
随机推荐
- iOS字体
- 用CAShapeLayer实现一个简单的饼状图(PieView)
自己写了一个简单的PieView,demo在这里:https://github.com/Phelthas/LXMPieView 效果如图: 参考了https://github.com/kevinzho ...
- C语言基于GTK+Libvlc实现的简易视频播放器(二)
简易视频播放器-全屏播放 一.课程说明 上一次我们使用gtk+libvlc实现了一个最简单的视频播放器,可以实现点击按钮暂定和停止播放视频,以及同步显 示视频播放进度,但即使作为一个视频播放器,只有这 ...
- Session 失效原因
转载http://blog.csdn.net/LLorJJ999/article/details/4107464 昨天去GTSC面试,有面试官问我关于Session丢失之后怎么查的问题,说老实话,开发 ...
- 职业规划:管理vs技术
"每个人都身怀天赋,但如果用会不会爬树能力来评判一只鱼,那它这辈子都会觉得自己是条蠢鱼" - 阿尔伯特.爱因斯坦 我想我为这篇博客已经准备了很长时间.但是看起了我还一直挣扎我该往哪 ...
- JavaSe:-javaagent,-agentlib,-agentpath
内容简述 -javaagent,-agentlib, -agentpath 说明 -javaagent示例 -javaagent.-agentlib.-agentpath -agentlib:li ...
- 15天玩转redis —— 第十一篇 让你彻底了解RDB存储结构
接着上一篇说,这里我们来继续分析一下RDB文件存储结构,首先大家都知道RDB文件是在redis的“快照”的模式下才会产生,那么如果 我们理解了RDB文件的结构,是不是让我们对“快照”模式能做到一个心中 ...
- XmlSerializer的使用
关键词: XmlSerializer StreamWriter T instance 保存xml文件 代码: public static void SaveXML<T>(string xm ...
- Python学习笔记1-数据类型
数据类型: float — 浮点数可以精确到小数点后面15位 int — 整型可以无限大 bool — 非零为true,零为false list — 列表 Float/Int: 运算符: / — 浮点 ...
- logback配置详解3<filter>
logback 常用配置详解(三) <filter> <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一.返回DENY ...