汇编语言不会编?
1月 21, 2021
上篇已经介绍了 CPU 的寄存器种类,知道了程序是由指令和数据组成的,以及 CPU 是如何通过寄存器运行程序的,那么现在可以真正了解下汇编指令集了。 前提须知 # 因为不同 CPU 架构的指令集都不尽相同,汇编语言通常不具有可移植性,这里介绍的还是以 16 位的 8086CPU 为主。 下面的描述,用 () 表示一个寄存器或内存单元中的内容,比如(ax)表示 ax 中的内容,(20000H)表示内 … ...
上篇已经介绍了 CPU 的寄存器种类,知道了程序是由指令和数据组成的,以及 CPU 是如何通过寄存器运行程序的,那么现在可以真正了解下汇编指令集了。 前提须知 # 因为不同 CPU 架构的指令集都不尽相同,汇编语言通常不具有可移植性,这里介绍的还是以 16 位的 8086CPU 为主。 下面的描述,用 () 表示一个寄存器或内存单元中的内容,比如(ax)表示 ax 中的内容,(20000H)表示内 … ...
看 Go 语言的调度器相关内容的时候里面很多内存堆栈、寄存器的概念,一开始没怎么看懂,需要先回来复习下相关的基础知识,早知道大学就好好学了。 前提须知 # 下面的内容都以 16 位的 8086CPU 的情况为准。 通常写一条汇编指令或一个寄存器的名称,不区分大小写。 为了区分不同的进制,在十六进制表示的数据的后面加 H,在二进制表示的数据后面加 B。 现在很多实际的源码中一般都是 32 … ...
Golang 的高并发能力是通过协程 goroutine 实现的,在 Go 语言的开发中,每涉及到 goroutine 的相关功能实现时,都会意识到自己需要对 MPG 的模型有一个大概的了解,在此基础上才能做好开发上的决策,本篇也即为 MPG 并发调度模型的学习笔记了。 进程、线程和协程 # 要对 goroutine 的调度器深入了解,需要先了解一下进程、线程的基础知识。 进程 # 进程作为拥有资 … ...
研究 Context 的源码,有助于对结合运用 interface 和 struct 的理解,以及对其他三方框架对 Context 接口的重新实现也能有一定认识,在实际开发中更是非常有帮助。Context 的源码非常短小,加上大概一半的注释整个文件也才 500 行,500 行就可以和面试官扯一个小时,ROI 巨大,确定不研究下么。 必备知识 # WithTimeout 使用 # func … ...
关于 Go 并发设计的哲学中,最常见的一句话就是:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存1。Go 语言采用 CSP(Communicating sequential processes)并发模型,底层运用 Channel 实现其特性,如果不对 Channel 有一番了解,也就很难真正掌握 Go 语言独特的并发技术。 使用方法 # 先复习下 Channel 的使用方法。 … ...
权限系统是一个比较通用的系统,几乎所有的后台业务都会涉及到,关于权限系统的设计经过一些最佳实践也已经被总结成各种模型,比如 ACL、RBAC、ABAC、PBAC等,下面开始详细介绍。 基本概念 # 在很多权限系统的框架和服务,包括 Casbin、Authing 里面,都有下面这些名词作为基础,所以在开始之前,还要先理解这些概念。 主体(Subject) # 想要访问资源的主体,可以先理解为用户。 … ...
说 Protobuf 之前,要先知道 RPC 是什么,可以说 Protobuf 是实现 RPC 的接口描述语言。 RPC # RPC,全称 Remote Procedure Call,中文叫远程过程调用。 go 语言基于标准库实现了一套自己的 RPC 调用规则:方法只能有两个可序列化的参数,其中第二个参数是指针类型,并且返回一个error类型,同时必须是公开的方法1。 Only methods … ...
谁需要看 # 如果你有100 万要理财,这个不适合你。如果你只有 1 万?那向你介绍一下我总结的理财方案~ 认识乒乓球拍 # 关于球拍的分类,我从各个角度出发整理了一个图: 可见,正是球拍的种类非常之多,每种特性组合在一起,会发生各种各样的效果,这也是为什么球友们对器材津津乐道、各种尝试的原因,也是乒乓球拍多样性表现,况且现在还没有介绍胶皮的多样性。 案例分析 # 张继科和vis # … ...
参考以下代码,运行时会报 panic: assignment to entry in nil map。 package main import "fmt" func main() { var m map[string]int m["a"] = 1 fmt.Println(m["a"]) } //panic: assignment to entry … ...
消息队列中间件(Message Queue Middleware,简称 MQ)在后端领域扮演很重要的角色,但是笔者之前日常多止步于使用,对机制原理研究很少。之前用 Python 写 Web 服务的时候,用到 RabbitMQ 的情况比较多,可能是因为有一个基于 Python 的消息队列的封装库 Celery 非常好用。后来写 Go 服务的时候,接入了公司整体的技术架构,Kafka 又用的比较多。这 … ...