当前位置: 首页 > 网络应用技术

一篇文章了解Golang的关键字延期

时间:2023-03-07 14:33:27 网络应用技术

  实现类似于GO关键字。

  将指令调用Runtime.deferProc放在延期出现的位置,然后插入呼叫运行时。DEFERERTURN函数返回的位置。在Goroutine的控制结构中,有一个表记录延期。在调用Runtime.deferProc时,需要推迟的表达式记录在表中。调用运行时。驱逐回收时,它将依次从登录表中“从堆栈中”,然后从defer表中“从堆栈中”。

  如果有多个防御能

  延期信息将注册到链接列表。当前执行的Goroutine持有此链接列表的头指针。每个Goroutine都有一个相应的结构结构G。一个字段指向此延期链接列表标头

  新注册的延期将添加到链接列表中,因此感觉就像堆栈一样的呼叫的进步

  延期总共有两个参数。第一个是参数的大小和返回值,第二个是funcval的指针

  将参数编写为堆,然后在执行时复制参数(参数和返回值)

  GO将使用不同的规格分配_defer池。执行后,将一个从free_defer中取出。没有适当的加固分配。使用它后,将其放回free_defer池。避免频繁的堆分配和回收

  GO1.12中存在的推迟问题

  GO1.13中的延期优化

  GO1.14中的延期优化

  defer添加局部变量以确定是否有必要执行。

  deferProcstack

  Youlin实验室

  进行语言设计和实施

  原始:https://juejin.cn/post/7101887123539623944