在不同的处理器(GC逻辑堆)上调度任务延续会发生什么情况?
本文关键字:延续 任务 调度 什么情况 处理器 GC | 更新日期: 2023-09-27 18:16:46
据我所知,当为。net应用程序启用服务器gc模式时,它为每个处理器分配一个逻辑堆,每个处理器上调度的线程将为其分配内存。
分配给具有多个等待的Task
的内存会发生什么?它可以在线程池中的任何线程上执行,因此可以在逻辑堆之间跳转。
上一个逻辑堆上分配的内存是否被复制到当前执行的逻辑堆上?在相同的逻辑堆/核心上不执行Task
延续是否有任何代价?
分配给具有多个等待的任务的内存会发生什么?它可以在线程池中的任何线程上执行,因此可以在逻辑堆之间跳转。
线程对整个地址空间具有可见性,而不考虑逻辑分离。堆对象可以指向另一个没有边界的堆中的不同对象。请记住,不同的线程仍然可以在不同的时间片上被调度到同一个CPU上。
上一个逻辑堆上分配的内存是否被复制到当前执行的逻辑堆上?在相同的逻辑堆/核心上不执行任务延续是否有代价?
不,如果运行时被迫在堆之间复制对象,这会导致巨大的运行时性能下降。同样,一个线程可能不在分配给它的同一个逻辑堆上运行,但这并不意味着它不能引用那个堆。每核堆背后的思想是能够扩展分配并能够改进并行gc收集。