博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
11.python并发入门(part13 了解事件驱动模型))
阅读量:6148 次
发布时间:2019-06-21

本文共 1219 字,大约阅读时间需要 4 分钟。

一、事件驱动模型的引入。

在引入事件驱动模型之前,首先来回顾一下传统的流水线式编程。

开始--->代码块A--->代码块B--->代码块C--->代码块D--->......--->结束

每一个代码块里是完成各种各样事情的代码,但编程者知道代码块A,B,C,D...的执行顺序,唯一能够改变这个流程的是数据。输入不同的数据,根据条件语句判断,流程或许就改为A--->C--->E...--->结束。每一次程序运行顺序或许都不同,但它的控制流程是由输入数据和你编写的程序决定的。如果你知道这个程序当前的运行状态(包括输入数据和程序本身),那你就知道接下来甚至一直到结束它的运行流程。

事件驱动模型的大体执行流程:

开始---->初始化---->等待

当基于事件驱动模型的程序一旦执行,就会开始等待,等待一个事件被触发。(其实等待一个事件被触发的情况,在传统的流水线式编程中也有,“等待”的情况存在,比如说一个raw_input会导致程序去等待用户的输入一个数据。)但是,你需要知道,这两种等待是有不同的!

流水线编程的“等待”是程序的编写者提前知道,或者需要去强制程序的使用者去输入一些数据。

但是事件驱动模型中的”等待“,完全不知道程序的使用者到底要做什么,某件事一旦发生(比如,用户单击了一下鼠标,或者敲了下键盘按键,以及系统内部定时器的触发。)程序就会做出相应的“反应”。

二、简单介绍事件驱动模型。

常用的事件驱动模型大概可以分为3类。

  1. 当每收到一个请求的时候,创建一个线程来处理请求。

  2. 当每收到一个请求的时候,创建一个进程来处理请求。

  3. 当每收到一个请求的时候,将一个请求放进事件列表,让主进程通过非阻塞I/O方式来处理请求。#(这种方法是指协程事件驱动的方式。)

假设,现在需要创建一个线程,利用死循环的方式,去检测用户的鼠标是否有一个点击的动作。

  1. 首先使用死循环去检测鼠标是否有点击动作这个做法就很浪费cpu资源!

  2. 如果检测鼠标是否点击的接口阻塞了,程序停在这了,又会引发另一个问题,如果这时候还要检测,键盘是否有被按下,(有多个事件需要被检测),检测鼠标是否被按下的接口还在阻塞状态,接下来就永远不会去检测键盘。

所以说,现在大部分的UI编程,都基于事件驱动模型,大部分的UI编程都会提供一个onClick()事件,这个事件代表了按下鼠标的一个事件,这个事件处理的大体模型如下:

这里写图片描述

首先先来看上图:

1.事件驱动模型,首先是要有一个事件列表(这个列表相当于消息队列)。

2.一旦点击鼠标,就会在这个事件列表(消息队列)中,添加一个事件(消息)。

3.此时,会有一个循环,不断的从事件列表(消息队列)里面取事件,根据不同的事件调用不同的函数。

4.事件(消息)都有一个独立的处理函数。

      本文转自苏浩智 51CTO博客,原文链接:http://blog.51cto.com/suhaozhi/1926755,如需转载请自行联系原作者

你可能感兴趣的文章
虚拟机VMware 9安装苹果MAC OSX 10.8图文教程
查看>>
微信小程序开发-框架
查看>>
redo、undo、binlog的区别
查看>>
DropDownList 控制日期控件显示格式
查看>>
RecycleView设置顶部分割线(记录一个坑)
查看>>
汉字转拼音 (转)
查看>>
Machine Learning Techniques -6-Support Vector Regression
查看>>
会计基础_001
查看>>
ajax请求拿到多条数据拼接显示在页面中
查看>>
小程序: 查看正在写的页面
查看>>
Jenkins持续集成环境部署
查看>>
检查磁盘利用率并且定期发送告警邮件
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>