我的阅读分享:《薛兆丰经济学讲义》

读后感zkbhj 发表了文章 • 0 个评论 • 1918 次浏览 • 2020-07-22 10:00 • 来自相关话题

阅读书目:《薛兆丰经济学讲义》
作者:薛兆丰 著
书籍类型:经济学科普读物
页数:531页
阅读开始时间:2020年7月14日
阅读结束时间:
如何发现这本书:书店
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★
阅读建议:
豆瓣地址:https://book.douban.com/subject/30280804/






  查看全部


阅读书目:《薛兆丰经济学讲义》
作者:薛兆丰 著
书籍类型:经济学科普读物
页数:531页
阅读开始时间:2020年7月14日
阅读结束时间:
如何发现这本书:书店
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★
阅读建议:
豆瓣地址:https://book.douban.com/subject/30280804/



d9810190e7ed34db.jpg

 

#每日精进#2020年7月22日

总结zkbhj 发表了文章 • 0 个评论 • 1080 次浏览 • 2020-07-22 09:45 • 来自相关话题

【中台的发展方向】
中台经过数年的发展,已经进入到“碎片化中台”时代。
第一,业务中台。企业从业务顶层规划、业务建模开始,梳理出各业务领域的边界、服务能力,进而指导系统的服务化,以及企业数字化建设。
第二,“数据-业务”双中台。企业具备了业务领域建模、数据治理方面的能力,逐步建立起基于业务中台和数据中台的“双中台”模式,在这个过程中,沉淀自己的中台方法论和实践。
第三,碎片化中台。在完成业务中台、数据中台的建设之后,企业组织的效率已经有了显著提升,企业成本也随之降低。这个时候,中台建设进入到了碎片化中台阶段,组织内部按业务线或职能进行更细粒度拆分,比如:安全中台、财务中台、移动中台、客服中台、供应商中台、物流中台等等。
不管中台如何演变,大家记住一点:生产力决定生产关系,生产关系影响企业的组织模式,组织模式倒逼着系统架构适应组织架构,所以有了微服务、中台,这就是康威定律。
 
总的说来,中台主要解决两个问题:一是,提升体验;二是,降低成本。体验怎么提升呢?中台只是手段,中台的目的是支撑小前台。成本如何降低?通过合并重组相似组织来降低。
 
数据是中台的灵魂。数据的价值在于流动。
 
前中后台,都有自己的中台。中台的核心就是服务化。
https://mp.weixin.qq.com/s/jQ8sEhMTkZHab4NHqwyYGg
 
【管理学中的法则,也是“棍子管理法”的底层原理:赫勒法则】
“棍子管理法”的底层原理是赫勒法则,它是英国管理学家h.赫勒提出的,内容很简单:

当人们知道自己的工作成绩有人检查的时候,会加倍努力。


赫勒认为,没有有效的督促,就没有工作的动力,也就没有办法进行激励。
赫勒法则从人性的角度出发,认为人都是有惰性的。管理一方面要督促人对抗自身的惰性,另一方面也要真正调动员工的工作热情,提高员工的工作积极性。于是“激励+监督”,就是管理者手中的指挥棒,是让员工“动”起来的一个重要机制。
https://mp.weixin.qq.com/s/GJNuAz1FNIaDYw865oLhcQ
 
【读完了小说《坏小孩》】
看了电视剧再来看这本小说,真的是,会产生巨大的心理反差!
尤其是朱朝阳这个人物,是如此的黑暗和狡猾!不剧透了。总之,他最坏!
https://ask.zkbhj.com/?/article/345
  查看全部
【中台的发展方向】
中台经过数年的发展,已经进入到“碎片化中台”时代。
第一,业务中台。企业从业务顶层规划、业务建模开始,梳理出各业务领域的边界、服务能力,进而指导系统的服务化,以及企业数字化建设。
第二,“数据-业务”双中台。企业具备了业务领域建模、数据治理方面的能力,逐步建立起基于业务中台和数据中台的“双中台”模式,在这个过程中,沉淀自己的中台方法论和实践。
第三,碎片化中台。在完成业务中台、数据中台的建设之后,企业组织的效率已经有了显著提升,企业成本也随之降低。这个时候,中台建设进入到了碎片化中台阶段,组织内部按业务线或职能进行更细粒度拆分,比如:安全中台、财务中台、移动中台、客服中台、供应商中台、物流中台等等。
不管中台如何演变,大家记住一点:生产力决定生产关系,生产关系影响企业的组织模式,组织模式倒逼着系统架构适应组织架构,所以有了微服务、中台,这就是康威定律。
 
总的说来,中台主要解决两个问题:一是,提升体验;二是,降低成本。体验怎么提升呢?中台只是手段,中台的目的是支撑小前台。成本如何降低?通过合并重组相似组织来降低。
 
数据是中台的灵魂。数据的价值在于流动。
 
前中后台,都有自己的中台。中台的核心就是服务化。
https://mp.weixin.qq.com/s/jQ8sEhMTkZHab4NHqwyYGg
 
【管理学中的法则,也是“棍子管理法”的底层原理:赫勒法则】
“棍子管理法”的底层原理是赫勒法则,它是英国管理学家h.赫勒提出的,内容很简单:


当人们知道自己的工作成绩有人检查的时候,会加倍努力。



赫勒认为,没有有效的督促,就没有工作的动力,也就没有办法进行激励。
赫勒法则从人性的角度出发,认为人都是有惰性的。管理一方面要督促人对抗自身的惰性,另一方面也要真正调动员工的工作热情,提高员工的工作积极性。于是“激励+监督”,就是管理者手中的指挥棒,是让员工“动”起来的一个重要机制。
https://mp.weixin.qq.com/s/GJNuAz1FNIaDYw865oLhcQ
 
【读完了小说《坏小孩》】
看了电视剧再来看这本小说,真的是,会产生巨大的心理反差!
尤其是朱朝阳这个人物,是如此的黑暗和狡猾!不剧透了。总之,他最坏!
https://ask.zkbhj.com/?/article/345
 

怎么理解软件开发中的上游和下游?

回复

专业名词zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 11296 次浏览 • 2020-07-22 09:35 • 来自相关话题

#每日精进#2020年7月20日

总结zkbhj 发表了文章 • 0 个评论 • 1065 次浏览 • 2020-07-20 09:40 • 来自相关话题

【关于喝咖啡的几个真相】

1. 咖啡提神效果与基因有关,因人而异。
2. 咖啡可能会让心跳加快,这是正常的。
3. 喝咖啡不会导致心脏病。
4. 喝了咖啡,可能会频繁跑厕所。
5. 经期、孕期也能喝咖啡,但要适量。
6. 喝咖啡,不会导致胃溃疡。
7. 正常喝咖啡,不会导致骨质疏松。
8. 咖啡不致癌,还能降低某些癌症风险。
9. 经常喝咖啡会产生依赖,但不必戒。
10. 咖啡挺健康的,前提是别加糖。

https://mp.weixin.qq.com/s/bjbIbtHvnMTG_T_hAY3t5g
 
【三浦春马自杀事件】
这个世界虽然不完美,但我们仍然可以疗愈自己。
生活不易,请对自己善良一些! 
 

【关于疫情】
此次新冠疫情,国内也是此起彼伏的生发出来。北京刚刚宣布从今天0时起突发公共卫生事件相应级别从二级调整为三级,新疆那边又爆发。
大胆预测下,今年冬天还会有一波国内高峰。
张宏文说现在全球疫情还没有到达高峰,感觉只能等疫苗。
关于新冠后遗症的一些基本事实:
https://mp.weixin.qq.com/s/xuNYnbzeiSRq5k_7br4ZvA
 
【课程再学习:Go语言核心36讲】
1、库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话)。
2、理由是,为了不让该代码包的使用者产生困惑,我们总是应该让声明的包名与其父目录的名称一致。
3、Go 语言中的程序实体包括变量、常量、函数、结构体和接口。
4、短变量声明,实际上就是 Go 语言的类型推断再加上一点点语法糖。只能在函数体内部使用短变量声明。
5、重构的概念:

我们通常把不改变某个程序与外界的任何交互方式和规则,而只改变其内部实现”的代码修改方式,叫做对该程序的重构。重构的对象可以是一行代码、一个函数、一个功能模块,甚至一个软件系统。

6、Go 语言的类型推断可以带来哪些好处:对重构友好,提升程序的灵活性。Go 语言的类型推断可以明显提升程序的灵活性,使得代码重构变得更加容易,同时又不会给代码的维护带来额外负担(实际上,它恰恰可以避免散弹式的代码修改),更不会损失程序的运行效率。7、变量重声明其实算是一个语法糖(或者叫便利措施)。它允许我们在使用短变量声明时不用理会被赋值的多个变量中是否包含旧变量。
var err error
n, err := io.WriteString(os.Stdout, "Hello, everyone!\n") 查看全部
【关于喝咖啡的几个真相】


1. 咖啡提神效果与基因有关,因人而异。
2. 咖啡可能会让心跳加快,这是正常的。
3. 喝咖啡不会导致心脏病。
4. 喝了咖啡,可能会频繁跑厕所。
5. 经期、孕期也能喝咖啡,但要适量。
6. 喝咖啡,不会导致胃溃疡。
7. 正常喝咖啡,不会导致骨质疏松。
8. 咖啡不致癌,还能降低某些癌症风险。
9. 经常喝咖啡会产生依赖,但不必戒。
10. 咖啡挺健康的,前提是别加糖。


https://mp.weixin.qq.com/s/bjbIbtHvnMTG_T_hAY3t5g
 
【三浦春马自杀事件】
这个世界虽然不完美,但我们仍然可以疗愈自己。
生活不易,请对自己善良一些! 
 

【关于疫情】
此次新冠疫情,国内也是此起彼伏的生发出来。北京刚刚宣布从今天0时起突发公共卫生事件相应级别从二级调整为三级,新疆那边又爆发。
大胆预测下,今年冬天还会有一波国内高峰。
张宏文说现在全球疫情还没有到达高峰,感觉只能等疫苗。
关于新冠后遗症的一些基本事实:
https://mp.weixin.qq.com/s/xuNYnbzeiSRq5k_7br4ZvA
 
【课程再学习:Go语言核心36讲】
1、库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话)。
2、理由是,为了不让该代码包的使用者产生困惑,我们总是应该让声明的包名与其父目录的名称一致。
3、Go 语言中的程序实体包括变量、常量、函数、结构体和接口。
4、短变量声明,实际上就是 Go 语言的类型推断再加上一点点语法糖。只能在函数体内部使用短变量声明。
5、重构的概念:


我们通常把不改变某个程序与外界的任何交互方式和规则,而只改变其内部实现”的代码修改方式,叫做对该程序的重构。重构的对象可以是一行代码、一个函数、一个功能模块,甚至一个软件系统。


6、Go 语言的类型推断可以带来哪些好处:对重构友好,提升程序的灵活性。Go 语言的类型推断可以明显提升程序的灵活性,使得代码重构变得更加容易,同时又不会给代码的维护带来额外负担(实际上,它恰恰可以避免散弹式的代码修改),更不会损失程序的运行效率。7、变量重声明其实算是一个语法糖(或者叫便利措施)。它允许我们在使用短变量声明时不用理会被赋值的多个变量中是否包含旧变量。
var err error
n, err := io.WriteString(os.Stdout, "Hello, everyone!\n")

鲜牛奶和常温牛奶有什么区别?

回复

好吃喝zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 3826 次浏览 • 2020-07-18 17:53 • 来自相关话题

每日精进#2020年7月18日

总结zkbhj 发表了文章 • 0 个评论 • 1084 次浏览 • 2020-07-18 11:25 • 来自相关话题

【摩尔定律和安迪-比尔定律定率】
 
摩尔定律
 
摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月(目前验证18个月较为精确)便会增加一倍,性能也将提升一倍。
“摩尔定律”对整个世界意义深远。在回顾40多年来半导体芯片业的进展并展望其未来时,信息技术专家们认为,在以后“摩尔定律”可能还会适用。但随着晶体管电路逐渐接近性能极限,这一定律终将走到尽头。40多年中,半导体芯片的集成化趋势一如摩尔的预测,推动了整个信息技术产业的发展,进而给千家万户的生活带来变化。

https://www.zhihu.com/topic/19577621/intro​ 

安迪-比尔定律
 
其中的“安迪”,字面的意思是指英特尔公司的前CEO安迪·格鲁夫,背后所指代的是所有硬件厂商。而其中的“比尔”,字面的意思是指微软公司的比尔·盖茨,背后所指代的是所有软件厂商。

原文对于定律是这样解释的:Andy gives, Bill takes away.

直白地讲,就是硬件厂商们辛辛苦苦把硬件性能提升,而傻X软件公司们开发出更庞大、更消耗资源的软件,把硬件提升的性能给抵消了。 
从另一个角度来讲,安迪-比尔定律也并不全是坏事,许多新软件有着更高的配置要求,从而带动了硬件的消费市场,让整个IT生态更加活跃。比如某游戏公司推出一款酷炫的游戏,那么显卡公司一定会偷着乐。
 
https://zhuanlan.zhihu.com/p/80371343
 
  查看全部
【摩尔定律和安迪-比尔定律定率】
 
摩尔定律
 
摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月(目前验证18个月较为精确)便会增加一倍,性能也将提升一倍。
“摩尔定律”对整个世界意义深远。在回顾40多年来半导体芯片业的进展并展望其未来时,信息技术专家们认为,在以后“摩尔定律”可能还会适用。但随着晶体管电路逐渐接近性能极限,这一定律终将走到尽头。40多年中,半导体芯片的集成化趋势一如摩尔的预测,推动了整个信息技术产业的发展,进而给千家万户的生活带来变化。

https://www.zhihu.com/topic/19577621/intro​ 

安迪-比尔定律
 
其中的“安迪”,字面的意思是指英特尔公司的前CEO安迪·格鲁夫,背后所指代的是所有硬件厂商。而其中的“比尔”,字面的意思是指微软公司的比尔·盖茨,背后所指代的是所有软件厂商。

原文对于定律是这样解释的:Andy gives, Bill takes away.

直白地讲,就是硬件厂商们辛辛苦苦把硬件性能提升,而傻X软件公司们开发出更庞大、更消耗资源的软件,把硬件提升的性能给抵消了。 
从另一个角度来讲,安迪-比尔定律也并不全是坏事,许多新软件有着更高的配置要求,从而带动了硬件的消费市场,让整个IT生态更加活跃。比如某游戏公司推出一款酷炫的游戏,那么显卡公司一定会偷着乐。
 
https://zhuanlan.zhihu.com/p/80371343
 
 

每日精进#2020年7月17日

总结zkbhj 发表了文章 • 0 个评论 • 1187 次浏览 • 2020-07-17 10:57 • 来自相关话题

【Golang中goroutine协程的退出和销毁】
 
情况1:
Go语言中,若在子go协程中创建一个新 go协程,子go协程释放(销毁),新创建的go协程不会随着子go协程的销毁而销毁。
原因:go程共享堆,不共享栈,go程由程序员在go的代码里显示调度(释放)。package main
import (
"fmt"
"time"
"runtime"
)
func test() {
for i:=0;i<10;i++{
fmt.Printf("执行第%d次内层go程\n",i)
time.Sleep(time.Second)
}
fmt.Println("内层go程执行完毕!")
}
func main() {
go func() {
go test()
fmt.Println("------zkbhj-------")
time.Sleep(time.Second)
fmt.Println("------外层go程结束--------------")
/*
不管是return 还是 runtime.Goexit(),效果一样
*/
//return
runtime.Goexit()

}()
for{
runtime.GC()
}
}





从以上实例来看,虽然外层go协程已经退出,但是在go协程中新建的内层go协程还在执行!原因:go协程不共享栈,有自己独立的栈空间。外层go协程有自己的栈,在外层go协程中创建的新go协程也有自己的栈。外层go协程的栈被释放(回收),由于栈独立,因此新创建的内层go协程的栈不会被释放。 
情况2:
 
Go语言中,若在主go协程中创建一个新go协程,主go协程释放(销毁),新创建的go协程随着主go程的销毁而销毁。
原因:go程共享堆,不共享栈。package main

import (
"fmt"
"time"
)
func main() {
go func() {
for i:=0;i<10;i++{
fmt.Printf("子go程:执行第%d次操作!\n",i)
time.Sleep(time.Second)
}
}()
for i:=0;i<3;i++{
fmt.Println("--------zkbhj------")
time.Sleep(time.Second)
}
}





从以上实例来看,主go协程退出,子go协程马上退出。
原因:go协程共享堆。主go协程和新创建的子go协程共享一个堆。主go协程退出,执行main对应的{ },堆退出。由于是共享堆,所以对应的子go协程也会被销毁。

【深入理解Golang中的Runtime】
Golang Runtime是go语言运行所需要的基础设施
1、协成调度、内存分配、GC;
2、操作系统及CPU相关的操作的封装(信号处理、系统调用、寄存器操作、原子操作等),CGO;
3、pprof、trace、race检测的支持;
4、map、channel、string等内置类型及反射的实现。
 
与java、Python等的runtime不同,他们是虚拟机,而go的runtime是和用户代码一起编译到一个可执行文件中。用户代码和runtime代码除了代码组织上有界限,运行时没有明显界限。一些常用关键字被编译成runtime包下的一些函数调用,如go会变成 newproc,new会变成 newobject,等
 
Golang调度模型
PMG模型
轻量级携程G,栈初始2KB,调度不涉及系统调用,用户函数调用前会检查栈空间是否足够,不够会进行扩容,代码中的协程同步造成的阻塞,仅仅是切换协程,而不阻塞现成。
 
调用的进化史
Proctor(进程) --> Thread(LWP,lightweight process) --> Goroutine(一种lightweight userspace thread)
我们去看调度的一个进化, 从进程到线程再到协程, 其实是一个不断共享, 不断减少切换成本的过程。
 
对操作系统有过一些了解, 知道 linux 下的线程其实是 task_struct 结构, 线程其实并不是真正运行的实体, 线程只是代表一个执行流和其状态.真正运行驱动流程往前的其实是 CPU. CPU 在时钟的驱动下, 根据 PC 寄存器从程序中取指令和操作数, 从 RAM 中取数据, 进行计算, 处理, 跳转, 驱动执行流往前. CPU 并不关注处理的是线程还是协程, 只需要设置 PC 寄存器, 设置栈指针等(这些称为上下文), 那么 CPU 就可以欢快的运行这个线程或者这个协程了.

线程的运行, 其实是被运行.其阻塞, 其实是切换出调度队列, 不再去调度执行这个执行流. 其他执行流满足其条件, 便会把被移出调度队列的执行流重新放回调度队列.协程同理, 协程其实也是一个数据结构, 记录了要运行什么函数, 运行到哪里了。
 
sysmon协程是在go runtime初始化之后, 执行用户编写的代码之前, 由runtime启动的不与任何P绑定, 直接由一个M执行的协程. 类似于linux中的执行一些系统任务的内核线程。
 
调度综合总结: 
轻量级的协程, 栈初始2KB, 调度不涉及系统调用.调度在计算机中是分配工作所需资源的方法. linux的调度为CPU找到可运行的线程. 而Go的调度是为M(线程)找到P(内存, 执行票据)和可运行的G.用户函数调用前会检查栈空间是否足够, 不够的话, 会进行*2 栈扩容. 最大栈1G, 超出panic.用户代码中的协程同步造成的阻塞, 仅仅是切换(gopark)协程, 而不阻塞线程, m和p仍结合, 去寻找新的可执行的g.每个P均有local runq, 大多数时间仅与local runq无锁交互.  新生成的g, 放入到local runq中.调度时会随机从全局runq取g.  然后local runq, global runq... 均没有g的话, work stealing从其他P中取.sysmon: 对于运行过久的g设置抢占标识; 对于过久syscall的p, 进行m和p的分离. 防止p被占用过久影响调度.封装了epoll, 网络fd会设置成NonBlocking模式, 网络fd的read, write, accept操作, 会以NonBlocking模式操作, 返回EAGAIN则gopark当前协程. 在m调度, sysmon中, gc start the world等阶段均会poll出ready的协程进行运行或者添加到全局runq中目前(1.12), go还不支持非协作的抢占调度, 在密集CPU运算时, 可能会导致调度延迟. 官方已在解决.
 

https://www.acao.cn/course/program/402.html
  查看全部
【Golang中goroutine协程的退出和销毁】
 
情况1:
Go语言中,若在子go协程中创建一个新 go协程,子go协程释放(销毁),新创建的go协程不会随着子go协程的销毁而销毁
原因:go程共享堆,不共享栈,go程由程序员在go的代码里显示调度(释放)
package main
import (
"fmt"
"time"
"runtime"
)
func test() {
for i:=0;i<10;i++{
fmt.Printf("执行第%d次内层go程\n",i)
time.Sleep(time.Second)
}
fmt.Println("内层go程执行完毕!")
}
func main() {
go func() {
go test()
fmt.Println("------zkbhj-------")
time.Sleep(time.Second)
fmt.Println("------外层go程结束--------------")
/*
不管是return 还是 runtime.Goexit(),效果一样
*/
//return
runtime.Goexit()

}()
for{
runtime.GC()
}
}

QQ截图20200717104954.jpg


从以上实例来看,虽然外层go协程已经退出,但是在go协程中新建的内层go协程还在执行!原因:go协程不共享栈,有自己独立的栈空间。外层go协程有自己的栈,在外层go协程中创建的新go协程也有自己的栈。外层go协程的栈被释放(回收),由于栈独立,因此新创建的内层go协程的栈不会被释放。 
情况2:
 
Go语言中,若在主go协程中创建一个新go协程,主go协程释放(销毁),新创建的go协程随着主go程的销毁而销毁。
原因:go程共享堆,不共享栈。
package main

import (
"fmt"
"time"
)
func main() {
go func() {
for i:=0;i<10;i++{
fmt.Printf("子go程:执行第%d次操作!\n",i)
time.Sleep(time.Second)
}
}()
for i:=0;i<3;i++{
fmt.Println("--------zkbhj------")
time.Sleep(time.Second)
}
}

QQ截图20200717105408.jpg


从以上实例来看,主go协程退出,子go协程马上退出。
原因:go协程共享堆。主go协程和新创建的子go协程共享一个堆。主go协程退出,执行main对应的{ },堆退出。由于是共享堆,所以对应的子go协程也会被销毁。

【深入理解Golang中的Runtime】
Golang Runtime是go语言运行所需要的基础设施
1、协成调度、内存分配、GC;
2、操作系统及CPU相关的操作的封装(信号处理、系统调用、寄存器操作、原子操作等),CGO;
3、pprof、trace、race检测的支持;
4、map、channel、string等内置类型及反射的实现。
 
与java、Python等的runtime不同,他们是虚拟机,而go的runtime是和用户代码一起编译到一个可执行文件中。用户代码和runtime代码除了代码组织上有界限,运行时没有明显界限。一些常用关键字被编译成runtime包下的一些函数调用,如go会变成 newproc,new会变成 newobject,等
 
Golang调度模型
PMG模型
轻量级携程G,栈初始2KB,调度不涉及系统调用,用户函数调用前会检查栈空间是否足够,不够会进行扩容,代码中的协程同步造成的阻塞,仅仅是切换协程,而不阻塞现成。
 
调用的进化史
Proctor(进程) --> Thread(LWP,lightweight process) --> Goroutine(一种lightweight userspace thread)
我们去看调度的一个进化, 从进程到线程再到协程, 其实是一个不断共享, 不断减少切换成本的过程。
 
对操作系统有过一些了解, 知道 linux 下的线程其实是 task_struct 结构, 线程其实并不是真正运行的实体, 线程只是代表一个执行流和其状态.真正运行驱动流程往前的其实是 CPU. CPU 在时钟的驱动下, 根据 PC 寄存器从程序中取指令和操作数, 从 RAM 中取数据, 进行计算, 处理, 跳转, 驱动执行流往前. CPU 并不关注处理的是线程还是协程, 只需要设置 PC 寄存器, 设置栈指针等(这些称为上下文), 那么 CPU 就可以欢快的运行这个线程或者这个协程了.

线程的运行, 其实是被运行.其阻塞, 其实是切换出调度队列, 不再去调度执行这个执行流. 其他执行流满足其条件, 便会把被移出调度队列的执行流重新放回调度队列.协程同理, 协程其实也是一个数据结构, 记录了要运行什么函数, 运行到哪里了。
 
sysmon协程是在go runtime初始化之后, 执行用户编写的代码之前, 由runtime启动的不与任何P绑定, 直接由一个M执行的协程. 类似于linux中的执行一些系统任务的内核线程。
 
调度综合总结: 
  • 轻量级的协程, 栈初始2KB, 调度不涉及系统调用.
  • 调度在计算机中是分配工作所需资源的方法. linux的调度为CPU找到可运行的线程. 而Go的调度是为M(线程)找到P(内存, 执行票据)和可运行的G.
  • 用户函数调用前会检查栈空间是否足够, 不够的话, 会进行*2 栈扩容. 最大栈1G, 超出panic.
  • 用户代码中的协程同步造成的阻塞, 仅仅是切换(gopark)协程, 而不阻塞线程, m和p仍结合, 去寻找新的可执行的g.
  • 每个P均有local runq, 大多数时间仅与local runq无锁交互.  新生成的g, 放入到local runq中.
  • 调度时会随机从全局runq取g.  然后local runq, global runq... 均没有g的话, work stealing从其他P中取.
  • sysmon: 对于运行过久的g设置抢占标识; 对于过久syscall的p, 进行m和p的分离. 防止p被占用过久影响调度.
  • 封装了epoll, 网络fd会设置成NonBlocking模式, 网络fd的read, write, accept操作, 会以NonBlocking模式操作, 返回EAGAIN则gopark当前协程. 在m调度, sysmon中, gc start the world等阶段均会poll出ready的协程进行运行或者添加到全局runq中
  • 目前(1.12), go还不支持非协作的抢占调度, 在密集CPU运算时, 可能会导致调度延迟. 官方已在解决.

 

https://www.acao.cn/course/program/402.html
 

每日精进#2020年7月16日

总结zkbhj 发表了文章 • 0 个评论 • 1250 次浏览 • 2020-07-16 12:00 • 来自相关话题

【个人理财、资金管理经验总结】

1、花钱尽量用白条\花呗\信用卡,优先级是白条(每笔支付都有优惠)>花呗>信用卡:
可以白借用(无利息)一个月的钱为什么不用呢?省下来的钱就算去做最基本的理财,也可以省下至少一顿饭的钱。

2、不小看任何一个小的收入,也不要小看任何一次小的节省;
积少成多,积流成河。

3、白条\花呗\信用卡到期前一天或当天还款。
但是这个就要求你能记住或者准时进行操作,稍晚就可能会预期造成征信受影响。
推荐个方法,可以加入日历提醒,防止会忘记。或者使用支付宝的预约还款功能。
另外推荐2个信用卡还款渠道,比支付宝的好:
支付宝里的 网商银行:信用卡还款无手续费;京东金融:信用卡还款无手续费,且经常会有优惠(满减);
 
4、搞清楚自己有多少资产(包含公积金账户等的容易忽略的资金)

5、合理分配自己的资产。
如果在可预期的时间范围内,不急需用钱的情况下,可以做如下分配:
80%理财(不动或少动) + 20%流动资金(可以随时支取)
初级选手
理财:定期 + 基金
流动资金:余利宝>微信零钱通>京东金融小金库>余额宝
余利宝:可随时支取,额度高,且年化收益相对较高
京东金融小金库:可随时支取
 
6、坚决不碰P2P理财。
经验之谈。别问太多!!!
 
7、关于操作基金(或其他类似类型的如股票)。
个人觉得没什么良法或者完全的赚钱方法。故事其实就是考验人性的地方,坚持以下几个原则,我觉得可能真的做到赔钱也挺难的。
最重要的,首先一定要有这个概念:入市有风险、投资需谨慎!
其次,有以下几点可以供参考:
不拿全部家当进行操作。学习基本的理财相关的知识。如果啥都不懂,光跟风买这个买那个,不赔钱才怪。推荐一本李笑来的《韭菜的自我修养》小册子。是一些实用的投资建议。如果没有那么多钱(指的是几百万起步),那么就把“鸡蛋”放在有限的1个或两三个篮子里!如果看好一个行业,请长期持有,不要频繁买卖(赚的钱都没有手续费交的多),也不要太过在乎短期的波动(否则你的心脏可能会出问题)学会看趋势信息,最好的是在低位买,高位卖;低位时,要有勇气(前提是自己要有判断)建仓(如果不能明确是最低位,可以分批,当然要考虑手续费成本);高位时,更要有勇气(前提是自己要有判断)清仓,不要太过贪婪,想着还会再涨在涨,结果等来的是跌跌跌!钱,到手了,才是真的赚到,否则就是一串数字而已! 查看全部
【个人理财、资金管理经验总结】

1、花钱尽量用白条\花呗\信用卡,优先级是白条(每笔支付都有优惠)>花呗>信用卡:
可以白借用(无利息)一个月的钱为什么不用呢?省下来的钱就算去做最基本的理财,也可以省下至少一顿饭的钱。

2、不小看任何一个小的收入,也不要小看任何一次小的节省;
积少成多,积流成河。

3、白条\花呗\信用卡到期前一天或当天还款。
但是这个就要求你能记住或者准时进行操作,稍晚就可能会预期造成征信受影响。
推荐个方法,可以加入日历提醒,防止会忘记。或者使用支付宝的预约还款功能。
另外推荐2个信用卡还款渠道,比支付宝的好:
  • 支付宝里的 网商银行:信用卡还款无手续费;
  • 京东金融:信用卡还款无手续费,且经常会有优惠(满减);

 
4、搞清楚自己有多少资产(包含公积金账户等的容易忽略的资金)

5、合理分配自己的资产。
如果在可预期的时间范围内,不急需用钱的情况下,可以做如下分配:
80%理财(不动或少动) + 20%流动资金(可以随时支取)
初级选手
理财:定期 + 基金
流动资金:余利宝>微信零钱通>京东金融小金库>余额宝
余利宝:可随时支取,额度高,且年化收益相对较高
京东金融小金库:可随时支取
 
6、坚决不碰P2P理财。
经验之谈。别问太多!!!
 
7、关于操作基金(或其他类似类型的如股票)。
个人觉得没什么良法或者完全的赚钱方法。故事其实就是考验人性的地方,坚持以下几个原则,我觉得可能真的做到赔钱也挺难的。
最重要的,首先一定要有这个概念:入市有风险、投资需谨慎!
其次,有以下几点可以供参考:
  • 不拿全部家当进行操作。
  • 学习基本的理财相关的知识。如果啥都不懂,光跟风买这个买那个,不赔钱才怪。推荐一本李笑来的《韭菜的自我修养》小册子。是一些实用的投资建议。
  • 如果没有那么多钱(指的是几百万起步),那么就把“鸡蛋”放在有限的1个或两三个篮子里!
  • 如果看好一个行业,请长期持有,不要频繁买卖(赚的钱都没有手续费交的多),也不要太过在乎短期的波动(否则你的心脏可能会出问题)
  • 学会看趋势信息,最好的是在低位买,高位卖;
  • 低位时,要有勇气(前提是自己要有判断)建仓(如果不能明确是最低位,可以分批,当然要考虑手续费成本);
  • 高位时,更要有勇气(前提是自己要有判断)清仓,不要太过贪婪,想着还会再涨在涨,结果等来的是跌跌跌!
  • 钱,到手了,才是真的赚到,否则就是一串数字而已!

每日精进#2020年7月15日

总结zkbhj 发表了文章 • 0 个评论 • 896 次浏览 • 2020-07-15 11:58 • 来自相关话题

【如何写出健壮的代码?】
防御式编程
防御式编程是提高软件质量技术的有益辅助手段。防御式编程的主要思想是:程序/方法不应该因传入错误数据而被破坏,哪怕是其他由自己编写方法和程序产生的错误数据。这种思想是将可能出现的错误造成的影响控制在有限的范围内。
使用卫语句:所谓的卫语句的做法就是将复杂的嵌套表达式拆分成多个表达式,我们使用卫语句表现所有特殊情况。public void doSomething(DomainA a) {
if (a == null) {
return ; //log some errorA
}
if (a.getB() == null) {
return ; //log some errorB
}
if (!(a.getB().getC instanceof DomainC)) {
return ;//log some errorC
}
assignAction;
otherAction;
doSomethingA();
doSomethingB();
doSomthingC();
}
使用验证器 (validator)使用断言:使用断言的重要原则就是,断言不能有副作用,也绝不能把必须执行的代码放入断言。处理错误时的关键选择
DRY (Don't Repeat Yourself)
https://mp.weixin.qq.com/s/q5rx07ayJFiGNUBgrtiUdQ
 
【】 查看全部
【如何写出健壮的代码?】
防御式编程
防御式编程是提高软件质量技术的有益辅助手段。防御式编程的主要思想是:程序/方法不应该因传入错误数据而被破坏,哪怕是其他由自己编写方法和程序产生的错误数据。这种思想是将可能出现的错误造成的影响控制在有限的范围内。
使用卫语句:所谓的卫语句的做法就是将复杂的嵌套表达式拆分成多个表达式,我们使用卫语句表现所有特殊情况。
public void doSomething(DomainA a) {
if (a == null) {
return ; //log some errorA
}
if (a.getB() == null) {
return ; //log some errorB
}
if (!(a.getB().getC instanceof DomainC)) {
return ;//log some errorC
}
assignAction;
otherAction;
doSomethingA();
doSomethingB();
doSomthingC();
}

  • 使用验证器 (validator)
  • 使用断言:使用断言的重要原则就是,断言不能有副作用,也绝不能把必须执行的代码放入断言。
  • 处理错误时的关键选择

DRY (Don't Repeat Yourself)
https://mp.weixin.qq.com/s/q5rx07ayJFiGNUBgrtiUdQ
 
【】

每日精进#2020年7月14日

总结zkbhj 发表了文章 • 0 个评论 • 1344 次浏览 • 2020-07-14 11:14 • 来自相关话题

【如何低成本的完成一个副业】
 
反例:
动力减少觉得压力过大当有其他工作时,很难保证在项目上的投入现在觉得做其他事情更来劲忘记了如何推动项目前行搞不清自己在项目上忙什么淡忘了项目并进行归档
 副项目的挑战
任务切换和高认知负荷让人疲惫不堪丧失兴趣/动机完美主义--永无止境的项目冒牌货综合症缺乏专注力缺乏时间生活中各种意外事件
 重新制定目标:明确目标,制定小目标
 
方法:
准备好你的环境(无痛的状态切换)制定小目标(小步快跑)每次任务前进行心理热身,减少认知疲劳预测并淡然面对中断,快速切换状态,记录状态切换日志改变你的物理位置,换个工作地点,为你的项目设置一个单独的邮箱,为你的项目服务创建一个单独的系统用户在每次任务结束时记下心中的想法放弃的项目不总意味失败
 
https://hugozap.com/posts/how-to-finish-your-side-project/

【搜索:热词和底纹】
热词和底纹处于搜索引擎整个工作流程的最上游,如果运营得好,将为后续环节的优化起到非常好的铺垫作用,可以大大降低后续query理解、相关性、排序、运营干预等环节的调优难度,并且结合运营策略对提升业务目标可以有比较大的发挥空间。
https://help.aliyun.com/document_detail/172918.html
 
【Beego框架里中间件的实现方式】
beego对于框架中间件的实现最与众不同(天生的MVC框架),所以我们先来看beego,大家都知道beego在controller接口里定义了一个`Prepare()`的发方法,beego提供了一个基础的controller结构,然后实际的业务controller会合成复用这个基础的controller,然后我们再去复写`Prepare()`就可以了,通过这个预执行方法可以达到中间件的目的。代码如下:// 控制器接口
type ControllerInterface interface {
// 省略...
// 具体控制器需要实现的预执行方法
Prepare()
// 省略...
}但是除了上面之外大家常用的`Prepare()`,beego里其实还有一个`RunWithMiddleWares`的方法,我们可以当作注册启动前中间件的地方,代码如下:beego.RunWithMiddleWares("", libSentinel.FlowMiddleware,prometheus.Monitor)

// RunWithMiddleWares Run beego application with middlewares.
func RunWithMiddleWares(addr string, mws ...MiddleWare) {
...
BeeApp.Run(mws...)
} 查看全部
【如何低成本的完成一个副业】
 
反例:
  • 动力减少
  • 觉得压力过大
  • 当有其他工作时,很难保证在项目上的投入
  • 现在觉得做其他事情更来劲
  • 忘记了如何推动项目前行
  • 搞不清自己在项目上忙什么
  • 淡忘了项目并进行归档

 副项目的挑战
  • 任务切换和高认知负荷让人疲惫不堪
  • 丧失兴趣/动机
  • 完美主义--永无止境的项目
  • 冒牌货综合症
  • 缺乏专注力
  • 缺乏时间
  • 生活中各种意外事件

 重新制定目标:明确目标,制定小目标
 
方法:
  • 准备好你的环境(无痛的状态切换)
  • 制定小目标(小步快跑)
  • 每次任务前进行心理热身,减少认知疲劳
  • 预测并淡然面对中断,快速切换状态,记录状态切换日志
  • 改变你的物理位置,换个工作地点,为你的项目设置一个单独的邮箱,为你的项目服务创建一个单独的系统用户
  • 在每次任务结束时记下心中的想法
  • 放弃的项目不总意味失败

 
https://hugozap.com/posts/how-to-finish-your-side-project/

【搜索:热词和底纹】
热词和底纹处于搜索引擎整个工作流程的最上游,如果运营得好,将为后续环节的优化起到非常好的铺垫作用,可以大大降低后续query理解、相关性、排序、运营干预等环节的调优难度,并且结合运营策略对提升业务目标可以有比较大的发挥空间。
https://help.aliyun.com/document_detail/172918.html
 
【Beego框架里中间件的实现方式】
beego对于框架中间件的实现最与众不同(天生的MVC框架),所以我们先来看beego,大家都知道beego在controller接口里定义了一个`Prepare()`的发方法,beego提供了一个基础的controller结构,然后实际的业务controller会合成复用这个基础的controller,然后我们再去复写`Prepare()`就可以了,通过这个预执行方法可以达到中间件的目的。代码如下:
// 控制器接口
type ControllerInterface interface {
// 省略...
// 具体控制器需要实现的预执行方法
Prepare()
// 省略...
}
但是除了上面之外大家常用的`Prepare()`,beego里其实还有一个`RunWithMiddleWares`的方法,我们可以当作注册启动前中间件的地方,代码如下:
beego.RunWithMiddleWares("", libSentinel.FlowMiddleware,prometheus.Monitor)

// RunWithMiddleWares Run beego application with middlewares.
func RunWithMiddleWares(addr string, mws ...MiddleWare) {
...
BeeApp.Run(mws...)
}