3221|0

37

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

普及:事件触发式编程和事件调度简介 [复制链接]

计算机处理的是客观世界的具体任务,我们把它抽象成事件,程序员关注的也是事件,用户关注的也是事件,因此我们需要事件触发式编程。传统上,在VCVB之类的可视化编程工具支持下,我们可以实现事件触发式编程,比如往桌面上放置一个按钮,我们只需要编写按钮点击事件的处理函数,当点击事件发生后,该函数就自动执行。
传统操作系统,需要在VC之类的工具支持下,才能够做事件触发式编程,究其原因,是因为操作系统是按照线程调度的,必须经过开发工具的包装后,才能转换成事件触发。



1传统OS的线程调度图

1,传统的、基于线程调度的OS,无论是简单的ucos还是复杂windows,均可以用该图表示。我们知道,创建线程需要初始化线程并分配线程所需的资源,其中栈是必备的资源。但事实上,传统OS是不会频繁地在线程执行过程中创建新线程的,为什么呢?因为创建线程时必须为线程分配内存,分配内存的操作可能导致阻塞,而被阻塞的却是当前正在执行的线程。大家注意了,是新线程缺乏内存资源,当前线程并不缺乏资源,但被阻塞的却是不缺资源的当前线程,这是不合理的。如果新线程的优先级低于当前线程,那当前线程就冤了,因为一个低优先级的线程,而导致高优先级线程阻塞,这在RTOS中是个灾难;即使不被阻塞,创建线程是一个很费时的操作,高优先级线程执行过程中,花大量时间用于创建低优先级的线程,也是不合理的。所以,传统OS的线程,总是在初始化阶段创建,极少在运行过程中创建。



2 传统OS的事件触发式编程

因此,传统操作系统的事件触发式编程,不能在事件发生的时候才创建线程,而是只能在初始化是创建线程并启动,启动后等待事件发生,事件发生将唤醒线程,事件处理完后又进入休眠,如此周而复始,如 2所示。而无论事件是否会发生,线程肯定会占用资源。


  

3 djyos的事件调度核心

3djyos是按事件调度的,弹出事件时只是把事件控制块插入时间调度队列中,需要的时间就非常短。如果新弹出的事件的优先级不高于正在处理的事件,根本就不会为他创建线程或分配线程。传统操作系统中,事件发生后,操作系统把事件作为线程的资源交给线程处理,而djyos中正好相反的,事件发生后,操作系统把线程作为处理事件所需要的资源分配给事件。这使得djyos能够更加优化配置计算机的资源,就拿简单的通信程序为例,如果通信线没有连接,传统OS用于处理接收数据的线程依然会占用资源,而djyos则不会;如果频繁通信,传统OS只能由初始化时创建的线程依次处理,即使拥有多核cpu,也只能由一个核处理,其他cpu核只能干着急,在线程调度模式下优化多核编程,是很复杂的技术,已经发展成了一门学科;而djyos则会很自然地把频繁弹出的通信接收事件分散到不同的cpu核上,程序员根本不知道线程为何物,就能进行优化的多核编程。在这里,cpu核实际上也是当作解决事件所需要的资源而存在。
djyos下编程,程序员不需要知道什么是线程和进程,只需要把需要计算机处理的具体任务分解成一个个的事件类型,并为每个事件类型编写处理函数就可以了。
最后,再举一个简单的例子:公司有宝马和奥迪两台车(两个线程),“老总出行”这个任务分配给宝马执行,“副总出行”任务分配给奥迪执行,但两台车共用一名司机(只有一个cpu核)。传统操作系统下,调度器是决定那台车(线程)先使用司机(cpu),把“人(老总或副总)出行”这件事分配给车(线程)。如果老总要去钓鱼,副总要去赶飞机,但是,按照公司制度(调度策略)宝马线程的优先级高,先开,而副总没有分配给宝马,副总就只能叫飞机等一等。而djyos的调度是按事件进行的,操作系统调度的是那件事先处理,副总的事(赶飞机)优先级高的话,线程(车)和司机(cpu)就先分配“副总赶飞机”这个事件,老总钓鱼就要等一下了。

[ 本帖最后由 djyos 于 2009-11-30 15:34 编辑 ]
点赞 关注
个人签名坚持就是胜利,希望大家多多支持,http://www.djyos.com

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表