美文网首页
浅谈事件驱动和多路IO复用

浅谈事件驱动和多路IO复用

作者: 帅子锅 | 来源:发表于2018-12-22 18:14 被阅读0次

编程模式的变化

我们写服务器处理模型的程序时,有以下几种模型

(1)每收到一个请求,创建一个新的进程,来处理该请求;
(2)每收到一个请求,创建一个新的线程,来处理该请求;
(3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求

第(1)种现在肯定是不用了,没有人会傻到每次新来一个任务就会创建一个进程。
第(2)是比较常用的一种方式,但是一般大家都会想到一个问题,请求过多但是并不会无限制的创建线程,理论上也不可能一直创建线程,于是大家会采用线程池来处理。这是目前最常用的方式。但是创建线程池一定是完美的吗?当然不是,“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务,这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如websphere、tomcat和各种数据库等。但是,“线程池”和“连接池”技术也只是在一定程度上缓解了频繁调用IO接口带来的资源占用。而且,所谓“池”始终有其上限,当请求大大超过上限时,“池”构成的系统对外界的响应并不比没有池的时候效果好多少。所以使用“池”必须考虑其面临的响应规模,并根据响应规模调整“池”的大小。
第(3)中就是事件驱动模型,流程如下

  1. 有一个事件(消息)队列
  2. 鼠标按下时,往这个队列中增加一个点击事件(消息);
  3. 有个循环,不断从队列取出事件,根据不同的事件,调用不同的函数,如onClick()、onKeyDown()等;
  4. 事件(消息)一般都各自保存各自的处理函数指针,这样,每个消息都有独立的处理函数;

事件模型优点

1、支持重用,容易并发处理;2、有良好的扩展性;3、只需要单进程单线程处理所有请求这一块,减少资源的消耗

IO多路复用

image.png

在同一个线程里面, 通过快速拨开关的方式,来同时传输多个I/O流,ngnix(采用epoll模型)会有很多链接进来, epoll(包含事件驱动机制)会把他们都监视起来,然后监控他们的状态(事件驱动机制),当谁的状态发生变化时,也就是事件驱动机制监控到状态的变化,然后像拨开关一样,谁有状态就拨向谁,然后调用相应的代码处理。

出现的历史背景
select、poll、epoll

select、poll、epoll都是io多路复用的机制,区别如下


image.png

共同点就是大家都是io多路复用,不同点就是epoll采用事件驱动的方式。使得连接没有上限。

相关文章

  • 浅谈事件驱动和多路IO复用

    编程模式的变化 我们写服务器处理模型的程序时,有以下几种模型 (1)每收到一个请求,创建一个新的进程,来处理该请求...

  • 事件驱动,IO多路复用

    事件驱动 有一个事件(消息)队列; 鼠标按下时,往这个队列中增加一个点击事件(消息); 有个循环,不断从队列取出事...

  • libevent简介

    -----事件驱动: -----轻量级,专注于网络:只能做网络先关的事 -----支持io多路复用:epool,p...

  • NIO selector 多路复用reactor线程模型--20

    多路复用IO模型:多路复用IO模型是目前使用得比较多的模型。JavaNIO实际上就是多路复用IO。在多路复用IO模...

  • IO多路复用

    什么是IO多路复用 IO多路复用解决什么问题 目前有哪些IO多路复用的方案 具体怎么用 不同IO多路复用方案优缺点...

  • 五种 IO 模型

    五种 IO 模型 参考链接 一共有五种 IO 模型 阻塞 IO 非阻塞 IO 多路复用 IO 信号驱动 IO 异步...

  • 浅谈IO多路复用

    这篇文章主要讲述select的使用,selcet的优点在于, 它是POSIX所规定的, 所有正常的操作系统都是有的...

  • I/O模型/同步异步阻塞非阻塞

    I/O模型 阻塞式IO 非阻塞式IO I/O多路复用(select,poll,epoll) 信号驱动式IO 异步I...

  • IO复用

    在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现...

  • epoll用于高并发网络编程,优于select

    在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现...

网友评论

      本文标题:浅谈事件驱动和多路IO复用

      本文链接:https://www.haomeiwen.com/subject/ahfwkqtx.html