接上一篇继续分析一下runtime.newproc方法. 函数签名 newproc函数的签名为 newproc(siz int32, fn *funcval) siz是传入的参数大小(不是个数):fn对应的是函数,但并不是函数指针,funcval.fn才是真正指向函数代码的指针. // go/src/runtime/runtime2.go type funcval struct { fn uintptr // 真正指向函数代码的指针 } 关键字go 在golang中编译器会把类似 go foo(…
quagga支持BGP-4,BGP-4+协议,支持多协议(mpls,isis,ospf等等)以及单播,组播路由的导入和分发. 具体的协议,这里就不附录了,网络上有很多资料,或者RFC. 协议源码的学习基于前几章的quagga源码分析,所以刚接触的朋友最好浏览一下quagga的通用框架以及通用路由处理流程. 好了,闲话少说,直奔主题才是最要紧的. 一.BGP初始化 初始化在bgp_main.c的main函数里开始,其他协议也类似,比如isis的main函数就在isis_main.c,这个嘛,简单统…
本文所使用的golang为1.14,gdb为8.1. 一直以来对于函数调用都仅限于函数调用栈这个概念上,但对于其中的详细结构却了解不多.所以用gdb调试一个简单的例子,一探究竟. 函数调用栈的结构(以下简称栈) 栈包含以下作用: 存储函数返回地址. 保存调用者的rbp. 保存局部变量. 为被调用函数预留返回值内存空间. 向被调用函数传递参数. 每个函数在执行时都需要一段内存来保存上述的内容,这段内存被称为函数的"栈帧" 一般CPU中包含两个与栈相关的寄存器: rsp:始终指向整个函数调…
本文所使用的Golang为1.14,dlv为1.4.0. 源代码 package main import "fmt" func main() { fmt.Println("Hello") } 开始调试 root@xiamin:~/study# dlv debug test.go Type 'help' for list of commands. (dlv) l > _rt0_amd64_linux() /root/go/src/runtime/rt0_linu…
Linux系统调用 概念:系统调用为用户态进程提供了硬件的抽象接口.并且是用户空间访问内核的唯一手段,除异常和陷入外,它们是内核唯一的合法入口.保证系统的安全和稳定. 调用号:在Linux中,每个系统调用被赋予一个独一无二的系统调用号.当用户空间的进程执行一个系统调用时,会使用调用号指明系统调用. syscall指令:因为用户代码特权级较低,无权访问需要最高特权级才能访问的内核地址空间的代码和数据.所以需要特殊指令,在golang中是syscall. 参数设置 x86-64中通过syscall指…
本文内容主要分为三部分: main goroutine 的调度运行 非 main goroutine 的退出流程 工作线程的执行流程与调度循环. main goroutine 的调度运行 runtime·rt0_go中在调用完runtime.newproc创建main goroutine后,就调用了runtime.mstart.让我们来分析一下这个函数. mstart mstart没什么太多工作,然后就调用了mstart1. func mstart() { _g_ := getg() // 在启…
监控线程是在runtime.main执行的时候在系统栈中创建的,监控线程与普通的工作线程区别在于,监控线程不需要绑定p来运行. 监控线程的创建与启动 简单的调用图 先给出个简单的调用图,好心里有数,逐个分析完后做个小结. 主体代码 以下会合并小篇幅且易懂的代码段,个人认为重点的会单独摘出来. main->newm->newm1->newosproc func main() { ...... if GOARCH != "wasm" { // no threads on…
大体思路(六) 本节内容: 一.生命周期的钩子函数的实现 ==> callHook(vm , 'beforeCreate') beforeCreate 实例创建之后 事件数据还未创建 二.初始化initState ==>initState(vm) // 初始化数据 ==> initProps(vm,opts.props) 待续 ==> initMethods 待续 ==> initComputed 待续 ==> if data initData else { obser…
Spring源码学习--ClassPathXmlApplicationContext(一) spring源码学习--FileSystemXmlApplicationContext(二) spring源码学习--AbstractXmlApplicationContext(三) Spring源码学习--XmlWebApplicationContext(四) Spring源码学习--AbstractRefreshableWebApplicationContext(五) Spring源码学习--Abst…
前言 在前一篇文章:创建 IoC 容器的几种方式中,介绍了四种方式,这里以 AnnotationConfigApplicationContext 为例,跟进代码,看看 IoC 的启动流程. 入口 从 JavaConfig 中加载配置的 AnnotationConfigApplicationContext 启动方式如下: 进去之后发现构造其实是调用的当前无参构造. 所以在启动时也可以直接声明无参构造,改写为下面这种: public class AnnotationConfigApplication…