我刚读过一本书,说堆栈顶部(内存中)的激活记录始终是执行点。所以我的问题是,在并行执行过程中,什么激活记录位于最顶部?特别是对于同一程序,但运行多个线程。
最佳答案
这本书提出了一些理想化和简化的观点。在具有协程的系统中,在任何给定时间运行的概念功能可能不是其堆栈框架位于堆栈顶部的功能。 (实际上,这通常是通过将协程的所有激活记录融合到一个激活记录中来实现的,因此人们可以说该说法仍然正确。但是,从这个问题的精神出发,洞察力来自于了解细节。)大量的系统堆也为闭包分配激活记录,在这种情况下,当前执行的函数的激活记录根本不在堆栈上。
正如上面的评论所提到的,典型的线程机制为每个线程实现了一个单独的堆栈,因此存在多个最顶层的激活记录。在另一些设计中,“堆栈”的概念变得非常模糊。线程的主要复杂性是管理许多堆栈的存储,从而带来了复杂性。通常拥有很多线程意味着堆栈应该很小,但是这限制了线程可以进行的调用的深度。
当执行线程进入运行内核或中断时,出于安全性和正确性的原因,它经常切换到另一个堆栈。