zoukankan      html  css  js  c++  java
  • 事件驱动模型介绍

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

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

    第三种就是协程、事件驱动的方式,一般普遍认为第(3)种方式是大多数网络服务器采用的方式 。

    在UI编程中,常常要对鼠标点击进行相应,首先如何获得鼠标点击呢? 两种方式:

    1创建一个线程循环检测是否有鼠标点击

          那么这个方式有以下几个缺点:

      1. CPU资源浪费,可能鼠标点击的频率非常小,但是扫描线程还是会一直循环检测,这会造成很多的CPU资源浪费;如果扫描鼠标点击的接口是阻塞的呢?
      2. 如果是堵塞的,又会出现下面这样的问题,如果我们不但要扫描鼠标点击,还要扫描键盘是否按下,由于扫描鼠标时被堵塞了,那么可能永远不会去扫描键盘;
      3. 如果一个循环需要扫描的设备非常多,这又会引来响应时间的问题; 
        所以,该方式是非常不好的。

    2 就是事件驱动模型 

    目前大部分的UI编程都是事件驱动模型,如很多UI平台都会提供onClick()事件,这个事件就代表鼠标按下事件。事件驱动模型大体思路如下:

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

    所以,事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。另外两种常见的编程范式是(单线程)同步以及多线程编程。 注意,事件驱动的监听事件是由操作系统调用的cpu来完成的

     

    写出漂亮的博客就是为了以后看着更方便的。
  • 相关阅读:
    Spark开发-SparkUDAF(二)
    Spark开发-Spark UDAF(一)
    Spark开发-Spark中类型安全UDAF开发示例
    Spark开发_构建TypeSafe的Dataset
    布隆过滤器(Bloom Filter)
    一个 Spark 应用程序的完整执行流程
    Spark的RPC
    Spark调优
    Hbase系列文章
    Flink怎么做到精确一次的?
  • 原文地址:https://www.cnblogs.com/zhaowei5/p/9353871.html
Copyright © 2011-2022 走看看