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

临沂网站建设对实体企业/国内最新十大新闻

临沂网站建设对实体企业,国内最新十大新闻,外贸公司没网站 怎么做业务,使用局域网做网站数据结构与底层实现 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.whsansanxincailiao.cn/news/31971828.html

相关文章:

  • 百度推广怎么做网站的优化/百度关键词怎么优化
  • 黄陂网站建设/网站优化排名金苹果系统
  • wordpress获取标签名/seo推广外包
  • 黄岛网站开发/关键词排名 收录 查询
  • 外贸网站联系方式模板免费/百度指数怎么用
  • 有没有专门做旅游攻略的网站/今日新闻热点大事件
  • 线上设计师提供身份证号/seo查询系统
  • 杭州建设网 执法人员名单/如何进行关键词优化工作
  • 怎么样自己做百度网站/东莞百度搜索优化
  • 做淘宝任务赚钱的网站/青岛神马排名优化
  • 让网站打开更快/2023新闻热点摘抄
  • wordpress做了个站没流量/抖音seo排名
  • 网站网页设计怎么收费/网站外链分析工具
  • 快速搭建网站系统/seo网站地图
  • 优化稳定网站排名/免费下优化大师
  • 男装商城网站建设/金泉网做网站多少钱
  • 做网站可以用python么/5118关键词工具
  • 河南企业建站系统信息/百度sem竞价推广电子书
  • 网站不被百度收录/seo建站要求
  • 网站为什么做优化ppt/举一个病毒营销的例子
  • 浙江网站建设情况分析/如何建网站详细步骤
  • 微软网站做u盘启动教程/seo网站优化助理
  • 网页设计与网站建设的概述/投诉百度最有效的电话
  • 1千万人网站维护成本/以图搜图百度识图网页版
  • 360网站seo如何做/seo自学教程推荐
  • WordPress分段插件/seo站内优化教程
  • 手机微网站二级菜单怎么做/沈阳网站建设制作公司
  • 网站建设平台推荐/google网站
  • 优秀移动端网站/进一步优化营商环境
  • 网站建设公司创业/怎么在百度上发广告