事件驱动机制 event driver
软件的运行流程
- 由开发者决定和主导,唯一路径
- 由使用者决定和主导,多种路径
开发者驱动
main(){
do_something();
...
do_otherthing();
exit();
}
适合无人值守的批处理类场景,比如大多数命令行程序CLI,只在初始执行时接收用户输入参数。
用户驱动:轮询
main(){
while( char = getc() ) {
switch(char)
case '1' do_something();
case '2' do_otherthing();
...
case 'n' break; // exit();
}
}
适合用户介入的交互型场景,程序的执行路径不确定。 由main程序(应用层)持续等待(轮询)用户的输入,带来的问题性能较低
用户驱动:事件
var btn = document.querySelector('#btn');
var link = document.querySelector('a');
btn.addEventListener('click', function(e){
console.log('hello btn');
}, false);
link.addEventListener('dbclick', function(e){
console.log('hello link');
}, false);
由用户(主动)选择和决定程序(被动)的执行路径
事件的轮询(监听和分派)由底层的系统层实现,性能更高。
事件
- 事件是开发者、用户、系统之间进行协同的一种机制
- 开发者声明事件、编写事件处理函数
- 用户触发事件
- 系统接收和分派(dispatch)事件,执行相应的事件处理函数
- 事件是一种抽象,代表了软件的运行时行为
- 可能来自终端用户的输入,如键鼠
- 可能系统的状态变化,如页面装载完成、定时器等
- 事件的监听、分派、调用等,由底层系统实现,而非用户态的应用程序层,更加节约系统资源,性能更好。