事件驱动机制 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)事件,执行相应的事件处理函数
  • 事件是一种抽象,代表了软件的运行时行为
    • 可能来自终端用户的输入,如键鼠
    • 可能系统的状态变化,如页面装载完成、定时器等
  • 事件的监听、分派、调用等,由底层系统实现,而非用户态的应用程序层,更加节约系统资源,性能更好。

参考

results matching ""

    No results matching ""