编程哲学——任务优先级 与 个人生活

Unix操作系统里的优先级

在《Unix传奇》中有这样一句话,用户态的进程/线程是三等公民、root线程是二等公民、硬件中断是一等公民。

在操作系统中,"用户态"和"内核态"是两种不同的执行级别或模式。进程和线程是用户态下的执行实体,而硬件中断处理则通常在内核态进行。这里的“三等公民”、“二等公民”和“一等公民”是形象地描述它们在资源访问权限和优先级上的不同。

嵌入式系统里的优先级

在嵌入式系统的所有线程中,app_task掌握其他任务的生杀大权,它的时间流程是确定的。

因此,在嵌入式框架中,我们往往也会采用 执行具体任务的线程是三等公民、app_task是二等公民、硬件中断是一等公民。

下面我们以一个嵌入式的语音助手为例,分别探讨其内部的组成。首先先展示下它的整体框图。
在这里插入图片描述

  • 硬件中断

  • app_task
    在app_task中,我们使用switch语句确保每个时刻都只处于一个状态。

static void app_task(void *arg) {
  while (true) {
    switch (state) {
      //等待唤醒
      case WAKEUP_WAITING: {
      } break;

	  //开始录音和上传
      case RECORDING: {
      } break;

	  //等待服务器返回音频
      case PLAY_WAITTING: {
      } break;
	  
	  //等待播放完成
	  case PLAY_DONE_WAITING: {
      } break;

      //连续对话
      case VOICE_DETECT: {
      } break;
	  
	  //结束本次唤醒
      case END: {
      } break;
    }
  }
  • 执行具体任务的线程
    app_task给其他任务发送任务通知,
    并且,其他每个任务都有事件组负责监控任务状态。

在这里插入图片描述

任务与任务之间一般使用队列进行通讯。
在这里插入图片描述

任务间的优先级 与 个人生活

通常任务存在两种任务调度策略:

  1. 抢占式调度:在这种模式下,高优先级的任务拥有随时中断低优先级任务的权限。这可以类比于那些目标明确、行动果断的人,他们总是能够迅速抓住机会,优先处理最重要的事务。 优点是重要的事会保证执行,缺点是当下看起来不重要、需要长期坚持的事可能会被忽视。

  2. 轮转调度:所有任务被赋予相同的优先级,它们将按照既定的时间片轮流执行。这种方式类似于那些遵循计划、按部就班的人,他们坚持均衡原则,确保每项任务都能得到均衡的处理时间。 优点是每件事都有足够时间来执行,但是重要的事被分配的时间就会变少。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值