重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先你问过自己为什么要学Lua了吗?我是毕业七年的C++程序员,用Lua有两年多,让我来告诉你一些常人说不出的事情。
创新互联公司从2013年创立,是专业互联网技术服务公司,拥有项目网站建设、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元吉阳做网站,已为上家服务,为吉阳各地企业和个人服务,联系电话:028-86922220
Lua的那本书《Lua程序设计》只能教会你基本功,只能告诉你Lua是什么。例如告诉你这是一把“匕首(Lua)”,但是没告诉你能用匕首去做些什么伟大的事,最多告诉你可以用匕首去切水果。
Lua、Python、Ruby、JavaScript这些是高级动态脚本语言,能做很多面向对象语言以外非同寻常的事,开发效率高,性能差;和他们相比C++、Java这些只能算低级静态编译语言,只能进行面向对象编程,开发效率低,性能好;C语言、汇编语言更低级,开发效率更差,性能更好。此外,苹果新推出的swift语言还有谷歌的Go语言是例外,他们属于更加现代化的语言:高级动态编译语言(开发效率高、性能也不差)。
而要把高级语言学好,强烈推荐你看另外一本书《Ruby元编程》,它不仅告诉你如何用“大刀(Ruby)”去切水果,各种切,花式切;它还教你如何制作出精美的艺术品。教你精美艺术作品的制作流程及其原理思想,远比仅仅向你介绍某某工具是什么,带给你更多受益!
最后,当你学会如何制作精美艺术品之后,你会发现自己已经触类旁通:不仅用“大刀(Ruby)”可以去做艺术品,也可以用“匕首(Lua)”去做,还可以用“砍刀(Python)”“铁剑(JavaScript)”这些统统都可以做出艺术品。而别人没学过《Ruby元编程》的,还是天天在那只会切水果。你并不需要事先学会所有这些武器,其实他们都差不太多,例如等到工作中要用到Python时,临时上网查一下要用到的Python语法即可。
之所以把Lua比作匕首,它确实是高级脚本语言里面最轻量的,性能还是最好的。快去学吧,去把Ruby的一些高级思想用在Lua身上。遗憾的是Ruby元编程的34种法术大多不能运用在C++和Java这些低级静态编译语言身上,就像当年23种设计模式可以运用在C++和Java面向对象语言身上,却不能运用在更低级的C语言(非面向对象语言)身上。
PS:如果你基础太差,之前没学过什么编程语言,还是要先看《Lua程序设计》。如果你连面向对象语言的基础都没有,最好先看《Head First 设计模式》。先学会23种设计模式中常用的几种,再去学34种元编程法术哦!
还是忍不住想喷:许多趾高气昂多年抱着C++不放的大牛,瞧不起脚本语言,认为小学生都会写js脚本,这篇其实也是写给你们看的。你们都知道23种设计模式,但还没听说过34种元编程法术吧,该回去花几小时补习一下了。看完之后会觉得自己之前那么幼稚写出来的Lua代码真蠢,C++写出来的重复冗余代码更蠢,之前还在笔试卷子里出些个C++模板元编程题目的出题人最蠢!
参考:
Goroutine并发调度模型深度解析手撸一个协程池
Golang 的 goroutine 是如何实现的?
Golang - 调度剖析【第二部分】
OS线程初始栈为2MB。Go语言中,每个goroutine采用动态扩容方式,初始2KB,按需增长,最大1G。此外GC会收缩栈空间。
BTW,增长扩容都是有代价的,需要copy数据到新的stack,所以初始2KB可能有些性能问题。
更多关于stack的内容,可以参见大佬的文章。 聊一聊goroutine stack
用户线程的调度以及生命周期管理都是用户层面,Go语言自己实现的,不借助OS系统调用,减少系统资源消耗。
Go语言采用两级线程模型,即用户线程与内核线程KSE(kernel scheduling entity)是M:N的。最终goroutine还是会交给OS线程执行,但是需要一个中介,提供上下文。这就是G-M-P模型
Go调度器有两个不同的运行队列:
go1.10\src\runtime\runtime2.go
Go调度器根据事件进行上下文切换。
调度的目的就是防止M堵塞,空闲,系统进程切换。
详见 Golang - 调度剖析【第二部分】
Linux可以通过epoll实现网络调用,统称网络轮询器N(Net Poller)。
文件IO操作
上面都是防止M堵塞,任务窃取是防止M空闲
每个M都有一个特殊的G,g0。用于执行调度,gc,栈管理等任务,所以g0的栈称为调度栈。g0的栈不会自动增长,不会被gc,来自os线程的栈。
go1.10\src\runtime\proc.go
G没办法自己运行,必须通过M运行
M通过通过调度,执行G
从M挂载P的runq中找到G,执行G
《学习Go语言》百度网盘pdf最新全集下载:
链接:
?pwd=je9c 提取码: je9c
简介:Google工程师亲授,从学习语言语法特性到函数式编程、并发编程等等。理论与实战结合,帮助快速掌握Go语言。通过研读标准库等经典代码设计模式,启发读者深刻理解Go语言的核心思维,进入Go语言开发的更高阶段。