共 17 篇文章 |
|
这四个With函数,接收的都有一个partent参数,就是父Context,我们要基于这个父Context创建出子Context的意思,这种方式可以理解为子Context对父Context的继承,也可以理解为基于父Context的衍生。给一个函数方法传递Context的时候,不要传递nil,如果不知道传递什么,就使用context.TODOContext的Value相关方法应该传递必须的数据,不要什么数... 阅54 转0 评0 公众公开 18-03-28 08:49 |
func main() { go func() { c = a + 2 log.对一个Channel的发送操作(send) happens-before 相应Channel的接收操作完成关闭一个Channel happens-before 从该Channel接收到最后的返回值0不带缓冲的Channel的接收操作(receive) happens-before 相应Channel的发送操作完成。其happens-before规则和Java的也类似:任何sync.Mutex或sync.RWMutex 变... 阅37 转0 评0 公众公开 17-10-07 20:11 |
goroutine与调度器。启动过程做了调度器初始化runtime·schedinit后,调用runtime·newproc创建出第一个goroutine,这个goroutine将执行的函数是runtime·main,这第一个goroutine也就是所谓的主goroutine。goroutine在主动放弃cpu的时候(park/gosched),都会涉及到调用runtime·mcall函数,此函数也是汇编实现,主要将gorouti... 阅56 转0 评0 公众公开 16-12-31 21:27 |
本来想通过查看main函数的栈帧来验证之前的结论,但是golang对小函数自动转为内联函数,因此你们可以自己编译出来看看,main函数内部是没有调用test函数的,而是将test函数的汇编代码直接拷贝进main函数执行了;很明显,main函数调用test函数获取的是闭包对象的地址,通过这个闭包对象地址找到闭包函数,然后执行这个闭包函数,并且把闭包对象... 阅420 转0 评0 公众公开 16-12-26 16:39 |
a.go:20: can inline toTypea.go:15: can inline TypeOfa.go:17: inlining call to toTypea.go:31: can inline (*rtype).Kinda.go:40: inlining call to TypeOfa.go:40: inlining call to toTypea.go:17: t escapes to heapa.go:15: leaking param: i to result ~r1 level=0a.go:16: TypeOf &i does not escapea.go:24: t escapes to heapa... 阅1940 转1 评0 公众公开 16-12-09 12:09 |
groupcache如何使用的一个简单例子 | zhengkang.需要监听两个地方,一个是监听节点,一个是监听请求在批量设置节点地址的时候需要在地址前面加上http://,因为一开始我没有加上去,所以缓存信息一直不能再节点之间交互启动的节点地址要与设置的节点地址一致:数量和地址值。根据上图看到,第一个地址为:8002这个节点直接从缓存里面取值,但是在... 阅412 转0 评0 公众公开 16-11-09 11:58 |
A deferred function''s arguments are evaluated when the defer statement is evaluated.func a() { i := 0 defer fmt.The function f defers a function that calls recover and prints the recovered value (if it is non-nil).Defer in g 3Defer in g 2Defer in g 1Defer in g 0Recovered in f 4Returned normally from f.Defer i... 阅27 转0 评0 公众公开 16-10-06 20:04 |
Docker源码分析(九):Docker镜像1.前言。在rootfs挂载完毕之后,和Linux内核不一样的是,Docker Daemon没有将Docker Container的文件系统设为读写(read-write)模式,而是利用Union mount的技术,在这个只读的rootfs之上再挂载一个读写(read-write)的文件系统,挂载时该读写(read-write)文件系统内空无一物。容器镜像的rootfs是容器只读... 阅67 转0 评0 公众公开 16-09-08 22:30 |
func (conn *ServerConnection)Start() { if conn.Decode(conn) if err !// use type-length-value format: |4 bytes|4 bytes|n bytes <= 8M|type TypeLengthValueCodec struct {}func (codec TypeLengthValueCodec)Decode(c Connection) (Message, error) { byteChan := make(chan []byte) errorChan := make(chan error) var err error go... 阅480 转0 评0 公众公开 16-09-05 20:47 |
我们先考虑单颗单核CPU,操作系统内核与应用程序其实是也是在共享同一个CPU,当EIP在应用程序代码段的时候,内核并没有控制权,内核并不是一个进程或线程,内核只是以保护模式运行的,代码段权限为RING 0的内存中的程序,只有当产生中断或是应用程序呼叫系统调用的时候,控制权才转移到内核,在内核里,所有代码都在同一个地址空间,为了给不同... 阅36 转0 评0 公众公开 16-08-02 15:48 |