select:

通过监视多个文件描述符的数组。当select()返回后 文件描述符便会被内核修改标志位,使进程

能进行后续操作

-----------------------------------------------------------------------

我们知道多进程程序是可以利用到多核的优势的

但是 多进程意味着多倍的开销 和频繁的上下文切换

那么单进程能否达到并发执行的效果呢?

----------------------------------------------------------------

首先我们知道 在io等待的时间 浪费的大部分时间

我们可以这样做

如果客户端发过来一个连接 我服务器端 主线程 会做一个轮询 网络接口文件的文件句柄

发现状态变化 我就跟你建立连接 就会读你发过来的消息 扔到消息堆里

然后我也会一直刷着有没有返回 一有就返回给客户端

其实根本上还是串行的

如果你有幸在富士康做过事情 你也许很轻松就能明白。

如果一条产线 是one by one的做的话 产量不会很高的

但是如果在工人之间放一个储物箱的话 做好放到下一个里面去的 这样就会快很多

核心就是减少等待时间

但是select有个缺陷 当并发变得更大的时候 轮询会变得慢 而且文件句柄 要不断在内核态和

用户态间进行转换 而且会做很多无用功 而且还有最大文件描述符的问题

-----------------------------------------------------------------------------

这个时候 select的升级版 poll来了

但是poll 核心跟select 差不多

只是优化了 文件描述符的问题,但是任然没有解决 开销问题

-----------------------------------------------------------------------

【水平触发】

我们知道 由于select的工作方式 如果select或者pool 将就绪的文件描述符告诉进程的话

如果进没有对其 IO操作 那么 下次轮询还会 在告诉一次 这个就是水平触发 一般都不会丢失

就绪的程序

关于select那点事的更多相关文章

  1. 用DataBaseMail发图片并茂的邮件

    不知道各位的老板有没有这样的要求, 一些系统中的数据需要定时发出邮件提醒, 如呆料就要到期或者一些待办的事项提醒. 当然这些用SSRS报表订阅可以实现,但有些公司没有设定相应的报表服务,又或者只是一些 ...

  2. 最全的ORACLE-SQL笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unloc ...

  3. oracle erp 表结构

    BOM模块常用表结构 表名: bom.bom_bill_of_materials 说明: BOM清单父项目 BILL_SEQUENCE_ID NUMBER 清单序号(关键字)ASSEMBLY_ITEM ...

  4. ORACLE EBS常用表

    http://www.cnblogs.com/quanweiru/archive/2012/09/26/2704628.html call fnd_global.APPS_INITIALIZE(131 ...

  5. Java NIO Selector选择器

    Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是可以管理多个网络链接. 为什么使用S ...

  6. NIO教程 ——检视阅读

    NIO教程 --检视阅读 参考 BIO,NIO,AIO 总结 Java NIO浅析 Java NIO 教程--极客,蓝本 Java NIO 系列教程 --并发编程网 BIO,NIO--知乎 NIO 入 ...

  7. Matplotlib数据可视化(6):饼图与箱线图

    In [1]: from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParam ...

  8. 容易被忽略的事----sql语句中select语句的执行顺序

    关于Sql中Select语句的执行顺序,一直很少注意这个问题,对于关键字的使用也很随意,至于效率问题,因为表中的数据量都不是很大,所以也不是很在意. 今天在一次面试的时候自己见到了,感觉没一点的印象, ...

  9. (转载) Linux IO模式及 select、poll、epoll详解

    注:本文是对众多博客的学习和总结,可能存在理解错误.请带着怀疑的眼光,同时如果有错误希望能指出. 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案 ...

随机推荐

  1. MVC学习系列1--什么是MVC

    上面的虚线表示:被动角色.实线表示:主动角色. 1.控制器和视图:控制器和视图是双向的关系,但控制器的关系更主动. 当控制器是主动的角色的时候,控制器决定要显示哪一个View:当视图为主动角色时,视图 ...

  2. EntityFramework 数据库连接可用代码动态设定

    摘自:http://blog.csdn.net/dyllove98/article/details/9289553 数据库生成位置可控制(其实主要就是DbContext的构造函数) 1.使用DbCon ...

  3. 实时事件统计项目:优化flume:用file channel代替mem channel

    背景:利用kafka+flume+morphline+solr做实时统计. solr从12月23号开始一直没有数据.查看日志发现,因为有一个同事加了一条格式错误的埋点数据,导致大量error. 据推断 ...

  4. 7 Must Read Python Books

    7 Must Read Python Books I started learning Python just two years ago. Coming from a C++ and Java ba ...

  5. Shell十三问[转]

    Shell十三问 转载于网络,稍加整理. (一) 为何叫做Shell? 我们知道计算机的运作不能离开硬件,但使用者却无法直接对硬件作驱动,硬件的驱动只能透过一个称为"操作系统(Operati ...

  6. 浅谈Service层为何要有接口

    被人随意问了一句,为何每个service层都要写一个接口呢,多麻烦~虽然想说点什么,但是又不知道从何说起,只好从新整理一下思绪. 情景1:在开源框架中有很多这种情况,就是某个功能支持用户自定义扩展.说 ...

  7. ::before和::after伪元素的用法

    一.介绍 css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类——:hover,:link,:active,:target,:not(),:focus. 常见伪元素——::first-let ...

  8. 前端构建工具gulp使用

    前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中文文档 https://g ...

  9. JustWe-WebServer Android上的Http服务器

    JustWe-WebServer Android手机上的Http服务器,可以用于内网/外网的数据交换. ps: 这个项目是JustWeEngine游戏框架中处理网络事件的一部分. 如何使用 设置as ...

  10. JS入门学习,写一个简单的图片库

    <!-- 新手刚开始学JS,每天坚持写点东西 坚持下去,希望能有所进步 .  加油~~ --> <!DOCTYPE html>                         ...