11.python并发入门(part13 了解事件驱动模型))

简介:

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

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

开始--->代码块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,如需转载请自行联系原作者





相关文章
|
1天前
|
缓存 算法 数据处理
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
|
1天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
1天前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
1天前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
1天前
|
知识图谱 Python
Python入门:4.Python中的运算符
Python是一间强大而且便捷的编程语言,支持多种类型的运算符。在Python中,运算符被分为算术运算符、赋值运算符、复合赋值运算符、比较运算符和逻辑运算符等。本文将从基础到进阶进行分析,并通过一个综合案例展示其实际应用。
|
4月前
|
Python
【python从入门到精通】-- 第一战:安装python
【python从入门到精通】-- 第一战:安装python
79 0
|
4月前
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
156 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
|
4月前
|
IDE 开发工具 iOS开发
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
本篇将详细介绍如何在Mac系统上安装Python,并配置Python开发环境。内容涵盖Python的安装、pip包管理工具的配置与国内镜像源替换、安装与配置PyCharm开发工具,以及通过PyCharm编写并运行第一个Python程序。通过本篇的学习,用户将完成Python开发环境的搭建,为后续的Python编程工作打下基础。
415 2
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
|
4月前
|
iOS开发 MacOS Python
【10月更文挑战第1天】「Mac上学Python 1」入门篇1 - 安装Typora与Markdown编辑技巧
本篇将详细介绍如何在Mac系统上安装Typora这款简洁高效的Markdown编辑器,并学习Markdown常用语法。通过本篇,用户能够准备好记录学习笔记的工具,并掌握基本的文档编辑与排版技巧,为后续学习提供便利。
228 1
【10月更文挑战第1天】「Mac上学Python 1」入门篇1 - 安装Typora与Markdown编辑技巧
|
9月前
|
机器学习/深度学习 人工智能 运维
Python从入门到精通:1.1.2了解Python基本概念与安装Python环境
Python从入门到精通:1.1.2了解Python基本概念与安装Python环境

热门文章

最新文章

推荐镜像

更多