发现我就是个货真价实的小白,总喜欢思考这些最基本的问题,或许是没有通透吧。
我的心思太细腻,非常敏感...总喜欢琢磨细枝末节的东西,或者是扎的很深,也叫偏执吧...
计算机诞生以来,工作模式从来没变过,初始的卡片输入程序段,数据段,打印机的回车换行,一直进化到现在的内存中的代码段数据段,文本中的回撤换行符...不一而足,就像人类从猿到人的演化,随着需求和环境而改变,不变的是根本的结构。而计算机的演化史,进化得速度比较快罢了。
在我眼中cpu能干的活,要么是io类的指令,要么是计算类的指令,还可以直接分为用户态可以使用的指令,以及只能陷进内核态才能执行的特权指令,io明显是属于特权指令,这些特权指令,就是所谓的系统调用了(进程管理:内存管理,文件管理)。计算机干的活,按照作用分为计算转移存储,其实存储可以划出去,
内核的出现就是重复功能的包装,懒人的便利。
计算机的指令要管理硬件资源,如何使用和分配这些资源,归哪个进程使用。
一切的出现,包括模式,都是为了复用,内核就是为了复用。复用指的是模板,结构体以及方法,接口以及继承。
结构体(数据)+方法=工具+材料
还有单纯的工具,即function
我觉得分布式的每一个模块,就是一个运行的车间,一个进程,有共用的资源,每一个结构体+method就是一个工具加材料,也有单独的工具即function。车间内的接口,就是对工具的归类,结构体的继承,就是在原有工具上改造过去的新工具。
而分布式服务之间的服务发现和服务管理之类的,就是有个专门管理车间的车间。都是用户态的东西。所有车间还有一个共同的指挥室车间,是个司令部,就是内核车间,是多个车间,一些demon进程。所谓的包,就是工具包,是有类似功能的工具的集合。只要是编译成一个可执行文件的代码,我就认为是一个车间。车间里面有工具包-工具。
不同进程就有不同的车间。
所谓编程语言,就是一个翻译机,是人类与cpu&os的翻译机,如果不是系统调用,就会把人类想法翻译成机器码,如果需要系统调用,就会翻译成系统语言,把人类语言翻译成系统调用。这个角度上看,又加了os这种翻译。
内核并不认识golang,只有程序员才认识它,不仅认识它,还要深刻了解它以便驾驭之,码农用go写的程序,经过go的编译器,翻译成内核可以识别的标识以及机器码,程序启动之时,内核把这些机器码和标识load到内存,并在内核的进程管理单元,开辟一个数据块,记录这个进程相关的资源,并赋予这个进程以cpu时间片,即cpu开始执行这个机器码,到时间就收回。而进程的个数,golang程序员是无法左右的,是go之父设置的,设置了非阻塞模式io,不会让内核级线程爆发。
-----
所谓编程语言,就是和计算机沟通的语言,机器码,也分为数据 指令 控制流程,到汇编语言,高级语言,终归都是 数据 操作 和流程,高级语言,也归为这些,为了复用有了函数,对象,还可以把这些包起来成为一个工具包。
-----
------------------
所谓服务器编程,基本就是socket编程,主要关注协议和数据交换格式,协议比如http,ftp,mysql,如开源top榜上的zinx,数据交换格式比如json,jsoap,xml,涉及到编码和序列化,序列化就是把对象变成内存中的表示。编码是计算器和人类的约定。
--------------
我需要关注下反射,管道之类。这些是高级使用方式。