线程的基本概念
从系统角度看,线程是竞争系统资源的最小运行单元。线程可以使用或等待CPU、使用内存空间等系统资源,并独立于其它线程运行。
OpenHarmony LiteOS可以给用户提供多个线程,实现线程间的切换,帮助用户管理业务程序流程。具有如下特性:
- 支持多线程。
- 一个线程代表一个任务
- 抢占式调度机制,高优先级的线程可打断低优先级线程,低优先级线程必须在高优先级线程阻塞或结束后才能得到调度。
- 相同优先级线程支持时间片轮转调度方式。
- 共有32个优先级[0-31],最高优先级为0,最低优先级为31。用户进程可配置的优先级有22个 (10~31)。
1. 线程的状态
线程有多种运行状态。系统初始化完成后,创建的线程就可以在系统中竞争一定的资源,由内核进行调度。
线程状态通常分为以下四种:
就绪(Ready):该线程在就绪队列中,只等待CPU。
运行(Running):该线程正在执行。
阻塞(Blocked):该线程不在就绪队列中。包含线程被挂起(suspend状态)、线程被延时(delay状态)、线程正在等待信号量、读写队列或者等待事件等。
退出态(Dead):该线程运行结束,等待系统回收资源。
2. 线程状态迁移
就绪态→运行态: 任务创建后进入就绪态,发生任务切换时,就绪队列中最高优先级的任务被执行,从而进入运行态,同时该任务从就绪队列中移出。
运行态→阻塞态 :正在运行的任务发生阻塞(挂起、延时、读信号量等)时,将该任务插入到对应的阻塞队列中,任务状态由运行态变成阻塞态,然后发生任务切换,运行就绪队列中最高优先级任务。
阻塞态→就绪态(阻塞态→运行态):阻塞的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),此时被恢复的任务会被加入就绪队列,从而由阻塞态变成就绪态;此时如果被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,该任务由就绪态变成运行态。
就绪态→阻塞态 : 任务也有可能在就绪态时被阻塞(挂起),此时任务状态由就绪态变为阻塞态,该任务从就绪队列中删除,不会参