公众号merlinsea
- 闭包
- 闭包是由函数及其引用的环境组合而成的实体(闭包=函数+引用环境)
- golang中实现闭包如下所示,可以发现AddUpper()方法的返回结果是一个匿名函数,同时这个匿名函数引用了函数AddUpper()中的局部变量n和str,因此匿名函数和局部变量n和str构成了闭包。
- golang可以识别出哪些闭包环境中的变量,针对这些变量会在堆上分配,因此每次n=n+x以后新的n值会长期保存起来,下次再调用f函数的时候,会用新的n和str值。
- golang中典型的闭包使用举例
- sort包下的SearchInts()方法
- 协程
- golang中的开启一个协程以后,主线程会继续往下执行,当主线程执行结束的时候,所有由这个主线程开启的协程也会被结束。
- goroutine的调度模型 ——MPG模式
- M:操作系统的主线程(是物理线程)
- P:协程执行需要的上下文环境
- G:协程(是一种轻量级线程,即在用户态空间创建,不需要转为内核态)
- MPG的工作模式
- 程序可能有多个主线程在执行,如果这些M都挂在多个cpu上执行则是并行,如果是挂在一个cpu上执行则是并发
- 上下文环境P可以根据实际情况开启一个协程G去工作,如果开启了多个协程G,这些写协程以队列的形式挂在P的上下文环境下
- 当主线程正在执行的协程G阻塞的时候,go会有一种机制将挂在主线程下等待执行的其他协程分配给其他主线程继续执行。
golang版本永久算法题训练营~~
奔跑的小梁,公众号:梁霖编程工具库
算法训练营golang专题刷题来啦!!!!鱼皮编程导航的优惠券,扫码即可领取
公众号:梁霖编程工具库
今天我加入鱼皮知识新球了!!