程序员眼中的控制流
分类 | 技术 | 说明 |
---|---|---|
顺序控制流 | 顺序 | 多条语句顺序执行 |
选择 | if-else、switch | |
循环 | for、while、do while | |
跳转 | break、continue、return | |
函数调用 | ●控制流:调用时,控制权转到被调用函数 ●上下文切换:开销小,栈帧压栈退栈而已 ●上下文内容:函数的临时变量和返回地址 | |
并发控制流 | 协程 | ●控制流:协程是一种线程内多任务调度机制 ●协程调度:手动控制,用Python async库等 ●协程通信:消息传递或直接调用彼此的函数 ●上下文切换:开销较小,不涉及内核态切换 ●上下文内容:仅含局部变量、程序计数器等 |
线程 | ●控制流:线程有自己的栈,使程序不同部分并发运行 ●线程调度:OS内核负责,或用户态线程库管理负责 ●线程通信:共享变量、Queue通信、信号量 ●上下文切换:设计内核态,开销比协程大 ●上下文内容:寄存器、PC、栈指针、TLS变量 | |
进程 | ●控制流:程序的执行实例,拥有独立地址空间和资源 ●进程调度:OS内核负责 ●进程通信:共享内存、Queue通信、管道 ●上下文切换:开销大,涉及虚拟地址空间、fd资源等 ●上下文内容:寄存器,堆栈,fd和uid等多系统资源 | |
其他 | ●例如:Actor模型,多Actor并发执行、消息通信 | |
传统嵌入式 并发控制流 | 中断ISR | ●任务:ISR≈任务函数 ●调度:中断处理机制≈硬件回调软件 |
Super loop任务 | ●任务:main Loop中循环运行的一个函数 ●调度:main Loop中多任务,物理串行,逻辑并发 | |
Time slice任务 | ●任务:按固定频率运行的一个函数 ●调度:定时器中断辅助下,各任务以固定频率执行 | |
RTOS任务 | ●任务:RTOS支持的Task ●调度:RTOS负责调度,Task有独立的栈和优先级 |
发布评论