当前位置: 首页 > news >正文

工信部信息备案网站查询宝塔 wordpress 规则

工信部信息备案网站查询,宝塔 wordpress 规则,做app和做网站的区别,南阳网站托管数据结构与底层实现 Goroutine结构体 stack(栈内存范围) 结构体类型,包含 lo(低地址)和 hi(高地址)两个 uintptr 字段,描述 Goroutine 的栈内存区间 [lo, hi)。初始栈大小为 2KB&a…

数据结构与底层实现

Goroutine结构体

stack(栈内存范围)
结构体类型,包含 lo(低地址)和 hi(高地址)两个 uintptr 字段,描述 Goroutine 的栈内存区间 [lo, hi)。初始栈大小为 2KB,可动态扩容至 1GB。

m(Machine 绑定)
指向当前运行此 Goroutine 的内核线程(M)。调度器通过 M 将 Goroutine 映射到操作系统线程。

_panic 和 _defer(异常与延迟调用链)

  • _panic:指向当前最内层的 panic 结构体链表,处理异常传播。
  • _defer:指向延迟调用(defer)链表,按后进先出(LIFO)顺序执行清理操作。
type g struct {// Stack parameters.// stack describes the actual stack memory: [stack.lo, stack.hi).// stackguard0 is the stack pointer compared in the Go stack growth prologue.// It is stack.lo+StackGuard normally, but can be StackPreempt to trigger a preemption.// stackguard1 is the stack pointer compared in the //go:systemstack stack growth prologue.// It is stack.lo+StackGuard on g0 and gsignal stacks.// It is ~0 on other goroutine stacks, to trigger a call to morestackc (and crash).stack       stack   // offset known to runtime/cgostackguard0 uintptr // offset known to liblinkstackguard1 uintptr // offset known to liblink_panic    *_panic // innermost panic - offset known to liblink_defer    *_defer // innermost deferm         *m      // current m; offset known to arm liblinksched     gobuf......
}

panic结构体

从上述Goroutine结构体的定义,我们可以发现每一个Goroutine维护一个panic的链表,panic存储在栈上。

// _panic 保存了一个活跃的 panic 信息。// _panic 的值必须仅存在于栈上。// argp 和 link 字段是栈指针,但在栈增长时无需特殊处理:
// 由于它们是指针类型且 _panic 值仅存在于栈上,
// 常规的栈指针调整机制会自动处理这些字段。
type _panic struct {argp unsafe.Pointer // pointer to arguments of deferred call run during panic; cannot move - known to liblinkarg  any            // argument to paniclink *_panic        // link to earlier panic// startPC and startSP track where _panic.start was called.startPC uintptrstartSP unsafe.Pointer// The current stack frame that we're running deferred calls for.sp unsafe.Pointerlr uintptrfp unsafe.Pointer// retpc stores the PC where the panic should jump back to, if the// function last returned by _panic.next() recovers the panic.retpc uintptr// Extra state for handling open-coded defers.deferBitsPtr *uint8slotsPtr     unsafe.Pointerrecovered   bool // whether this panic has been recoveredgoexit      booldeferreturn bool
}

注意事项

golang中每个goroutine维护自己的panic信息,并不是全局的,所以,如果需要捕获panic信息需要在每个goroutine中处理。

所以,在下面的这个案例中recover不能捕获到panic信息。如果需要捕获到,需要在每个协程中都执行recover的逻辑。

func main() {defer func() {if r := recover(); r != nil {log.Printf("Recovered from panic: %v", r)os.Exit(1)}}()// 业务代码...go func() {testPanic()}()time.Sleep(1 * time.Second)
}

http://www.yayakq.cn/news/588238/

相关文章:

  • dw做一个小网站教程wordpress基础版
  • 广州做网站那家好为什么小城市做不出来好的网站
  • 企业资质证书查询官方网站微信小程序推广赚佣金
  • 网站seo外链接电子商务网站建设前的分析
  • 北京住房保障建设投资中心网站wordpress怎么上传音频
  • 做黄页网站要告我烟台网站建设兼职
  • 河南浪博网站开发制作网站的步骤和过程
  • 在长沙阳光医院做网站编辑做自己的优惠券网站
  • wordpress iis 伪静态 中文百度seo哪家公司好
  • 做旅游宣传哪个网站好菜鸟怎么做网站
  • 销售型企业网站二次元风格wordpress模板
  • 备案的网站每年都要备案么服装设计师网
  • 网站建设竞价托管品牌推广的方式有哪些
  • 个人业务网站免费制作文化产业协会网站源码
  • 个人如何学习做网站男女做暖暖的试看网站酥酥影视
  • 网站登录界面模板wordpress高级自定义字段怎么显示
  • 查看网站是由什么开源做的app有哪些推广方式
  • 跨境电商网站 建设要求网站建设订单
  • wordpress中文下载站门厂家网站建设
  • 官方网站建设专业公司企业网站建设 电脑配置
  • 广州网站建设 致茂成全视频免费观看在线看古装电视剧
  • 做推送好用的网站建站工具指北
  • 受欢迎的赣州网站建设怎么在浏览器上面建网站
  • 平台网站建设费用国外网站要备案吗
  • 成都隆昌网站建设哈尔滨seo优化排名推广
  • 做免费推广的网站有哪些云服务器快速安装wordpress
  • 南阳网站建设哪家专业wordpress轮播图大小怎么修改
  • 天津市武清区网站建设如何看网站有没有备案
  • 手机网站设计案例数码网站建设总体目标
  • 论坛网页设计烟台优化网站公司哪家好