• 线程池技术积累


    1.当chanel的作用只用来阻塞,不需要传递数据时:

        只需要c:=make(chan struct{}),构建空结构体可以减小内存消耗。

        阻塞goroutine时可以直接c<-struct{}{}不要忘了两个花括号。

    2.chanel内存消耗:当我们的超时控制上下文的阻塞chanel(取名为done)没有设定长度的时候,我们的所有线程都会卡住。

             但当我们设定了长度的时候(设置为1),我们的goroutine放了空结构体进入管道时就会继续执行,不会阻塞。重点在这里,当我们的goroutine的函数处理完    的时候(也就是出栈的时候),gc会把chanel清理掉,所以不会一直卡住.

    3.struct指针和非指针方法的区别:

        将结构体绑定到函数上,其实就是c语言上的将结构体作为第一个参数隐形的传递到方法里面。

            非指针:非指针也就是值的形式,将该结构体复制一份传递到方法里面。其实,当我们将非指针与方法绑定时,golang会自动创建指针绑定方法(与非指针同名)

                也就是说,我们在创建了func (t T)funtion(){}的时候,我们会自动拥有func (t *T)funtion(){}

            指针:将指向该结构体的指针复制到方法里面(也就是传递地址)

            指针与非指针也引出了方法集的概念。golang的结构体绑定的非指针和指针方法被称为方法集

            当你自定义的结构体里面又锁的时候,若是为这个绑定非指针的方法。那么会将结构体对象复制传递进方法,也就意味着,对不同的对象用了不同的锁。会造成死锁

            

  • 相关阅读:
    用c#控制台玩石头剪刀布游戏
    各种流行的编程风格
    New page, new world.
    windows phone注册表问题
    windows 7下用SaveFileDialog弹不出对话框问题
    在写windows phone自定义控件遇到的问题,请高手解答
    自定义事件和windows phone访问网站取得数据
    windows phone画板程序
    Sharepoint contant class
    How to nagivate to a list item by site id, web id,list id and item id.
  • 原文地址:https://www.cnblogs.com/eyeofbajie/p/16319263.html
Copyright © 2020-2023  润新知