并发编程中为什么需要加锁

并发操作临界资源导致的问题 先看一段代码 package main import ( "fmt" "sync" ) const N = 1000 func main() { var n int64 wg := sync.WaitGroup{} wg.Add(N) for i:=0; i<N; i++{ go func() { defer wg.Done() n++ // 第19行代码,变量n记性加1操作 }() } wg.Wa...

Golang,编程原理 2021/11/18 408℃ 0条

初识Golang汇编

0. 为什么写本文 在分析go的某些特性底层功能实现时发现:很多跟runtime运行时有关,而要掌握这一部分的话,有一道坎是绕不过去的,那就是Go汇编。索性就查阅了一些资料,在阅读之余整理总结了一下,并分享给大家。 (本文使用Go版本为 go1.14.1) 1. 为什么需要汇编 众所周知,在计算机的世界里,只有2种类型。那就是:0和1。 计算机工作是由一系列的机器指令进行驱动的,这些指令又是一组二进制数字,其对应计算机的高低电平。而这些机器指令的集合就是机器语言,这些机器语言在最底层是与硬件一一对应的。 显而易见,这样的机器指令有一个致命的缺点:可阅读性太差(恐怕也只有天才和疯子才有能力...

Golang,编程原理 2021/11/17 942℃ 0条

Go关键字的一次汉化过程

1. 为什么写本文 笔者在自己的原创文章 [关于中文编程的一些思考]中,有一段关于go的中文代码,并且还能正常执行。 可能有些小伙伴看到之后,在自己的电脑上也执行了同样的代码却报错,原因就是:还需要对部分源码进行修改。这里,笔者就整理了一下操作的步骤。 2. 源码修改步骤 拉取Go源代码 git clone https://github.com/golang/go.git 从GitHub拉取Go源代码的好处是:拉取的源码中包含了多个版本分支,可以切换到自己想要的版本。 切换到编译的版本 cd go git branch -a git checkout -b go1.14 origin/...

Golang,编程原理 2021/11/16 1067℃ 0条

Go程序启动过程的一次追溯

每当编写的Go代码正确执行之后,总是有一种莫名的感觉——成就感。 但是,作为一个志在远方的码农来说,我们不仅要知其然,也要知其所以然。在知道Go代码是怎么编写的情况下,还需要了解Go程序的执行过程中都做了些什么。感兴趣的话,请跟随我的脚步一起来探索吧 本文适用人群:对go程序启动过程以及源码感兴趣的小伙伴 运行环境 笔者在整个源码追溯的过程中所依赖的运行环境如下: // centos 7.9.2009 [root@localhost go-project]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) /...

Golang,编程原理 2021/11/16 698℃ 0条

关于中文编程的一些思考

0. 为什么写这篇文章 笔者曾写过一篇《我眼中的C语言及其起源》(在其他地方叫《C语言发展史的点点滴滴》)的文章,文中从历史角度结合Unix系统源码来追溯了C语言的起源以及发展史(C语言的伟大毋庸置疑,但是其他语言带来的多样化也是十分重要),至于文章内容这里就不做过多赘述,感兴趣的读者可以查看原文。 本文则缘起于,在头条转载的本文评论中一位读者提到的一句话:"国产易语言在角落瑟瑟发抖"。看到这句话之后,顿时就对中文编程语言的原理产生了兴趣。由于平时业务开发过程中使用的主要语言是PHP/Golang,所以就从某种角度出发,并结合PHP、编译原理来分析一下中文编程语言的某些相似性原理。如果感...

PHP,Golang,编程原理 2021/11/16 882℃ 0条