接上一篇继续分析一下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(…
写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spring的整体思路就是按部就班的读取标签并把数据放入一个map集合中以备后用. ps:以前在看别人写博客时没有很注意,到自己写才发现:博文一长,如何去维持文章的可读性,让读者在阅读时理清整篇文章的脉络实在是一件很难的事情.上篇文章就是如此,我自己回头去读时都难以去顺畅的学习,何况他人,甚是惭愧.也尝试数…
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):rule 源码目录结构如图: validator 源码分析 validator 与 rule 紧密相连,rule 目录下的文件主要功能是校验 value 和 rule ,然后给 errors 数组中添加 error .validator 则是把 校验的 value 细分成各种类型,对不同的类型进行不同的…
StringBuilder和StringBuffer 前面讲到String是不可变的,如果需要可变的字符串将如何使用和操作呢?JAVA提供了连个操作可变字符串的类,StringBuilder和StringBuffer,从源码中可以看到这两个类都是采用final修饰,并且继承抽象类AbstractStringBuilder的. abstract class AbstractStringBuilder implements Appendable, CharSequence { /** * The v…
本文所使用的golang为1.14,gdb为8.1. 一直以来对于函数调用都仅限于函数调用栈这个概念上,但对于其中的详细结构却了解不多.所以用gdb调试一个简单的例子,一探究竟. 函数调用栈的结构(以下简称栈) 栈包含以下作用: 存储函数返回地址. 保存调用者的rbp. 保存局部变量. 为被调用函数预留返回值内存空间. 向被调用函数传递参数. 每个函数在执行时都需要一段内存来保存上述的内容,这段内存被称为函数的"栈帧" 一般CPU中包含两个与栈相关的寄存器: rsp:始终指向整个函数调…
Linux系统调用 概念:系统调用为用户态进程提供了硬件的抽象接口.并且是用户空间访问内核的唯一手段,除异常和陷入外,它们是内核唯一的合法入口.保证系统的安全和稳定. 调用号:在Linux中,每个系统调用被赋予一个独一无二的系统调用号.当用户空间的进程执行一个系统调用时,会使用调用号指明系统调用. syscall指令:因为用户代码特权级较低,无权访问需要最高特权级才能访问的内核地址空间的代码和数据.所以需要特殊指令,在golang中是syscall. 参数设置 x86-64中通过syscall指…
本文所使用的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…
本文内容主要分为三部分: 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…
Module类是模块和应用类的基类. yiisoft\yii2\base\Module.php <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ namespace yii\base; use Yii; use yii\di\ServiceLocator;…