计算机底层的秘密读书笔记之一

计算机,底层,秘密,读书笔记,之一 · 浏览次数 : 125

小编点评

**计算机底层的秘密读书笔记摘要** **第一章:编程语言到可执行程序** - 作者介绍了多种编程语言到可执行程序的转换方法。 - 编程语言的抽象层和底层之间存在着密切的联系。 **第二章:程序运行起来的情形** - 程序运行过程是一个动态的过程,需要根据不同的情况采取不同的处理策略。 - 不同平台上的程序运行环境可能存在差异。 **第三章:内存的介绍** - 计算机内存是一个动态分配的存储区域。 - 不同的程序运行需要在不同的内存区域之间进行访问。 **第四章:最重要的CPU** - CPU是计算机执行程序的关键部分。 - 不同的CPU架构具有不同的性能优势。 **第五章:CPU里面的重要的Cache** - CPU中存在着缓存,用于加速程序运行。 - 缓存可以缓存频繁访问的数据,从而减少程序运行时间。 **第六章:I/O用自己的理解改写了下章节** - I/O操作对程序执行时间具有重大影响。 - 作者通过改写I/O操作,降低了程序执行时间。 **第七章:进程-线程-协程** - 进程是操作系统进行资源分配的最小单元。 - 线程是操作系统进行调度的最小单元。 - 协程是应用程序自己实现的部分线程调度处理。

正文

计算机底层的秘密读书笔记之一


摘要

上周天在家休息时在知乎上面看到了影响性能的几个场景.
里面见到了cache的乒乓问题,以及cache line的伪共享问题.
知乎的答案里面图文并茂. 作者的思路也很清晰
就顺着水印找到了公众号还有作者刚出版的一本书. 
京东周一快递到手后,这几天晚上都没陪儿子跳绳一直在抽时间来看.
感觉收获很多, 特意想总结一下, 希望能够备忘和提高自己. 

书的文章结构

第一章: 编程语言到可执行程序
第二章: 程序运行起来的情形
第三章: 内存的介绍
第四章: 最重要的CPU
第五章: CPU里面重要的Cache
第六章: I/O

用自己的理解改写了下章节.
不像原书这样华丽,为了好记. 

学习到的重要的点-1

词法分析和语义分析
文本型的程序源文件,经过词法分析, 语义分析,转换成语法树.
高级语言的发展, 解释性语言,以及编译器的来源与用途. 

代码中都有一个连接操作, 其实java的类加载器里面也有连接的一个过程.
连接就有静态连接和动态连接. 
各有他的优缺点. 为了可移植性. 静态连接更好一些. (比如编译安装redis)
为了节省磁盘和内存 动态连接更优秀一些

静态连接不仅会增加磁盘的用量. 加载到内存之后text的段区域会占用更多的内存空间. 

本周其实还看到了一个公众号讲解CPU的里面说到. 
微观来看 性能其实是: 
时间/程序 的倒数. 
又等于 单位时间执行的指令数 与 程序内包含的指令数的除法关系. 

学习到的重要的点-2

进程-线程-协程

现代操作系统其实可以理解为是一个时分复用的操作系统. 
摩尔定律逐渐失效的这几年, 增加了多核心多进程多路来提高绝对性能. 
最开始的计算机科学主要是基于 单核心单线程的 机器来考虑. 
所以其实很多书本上的知识网络上的知识都是不太合适的. 

一般的说法是 进程是操作系统进行资源分配的最小单元.
线程是操作系统进行调度的最小单元. 

进程之间的资源是隔离的. 线程之间可以共享同一个进程内的大部分上下文信息. 

进程切换时需要切换很多内容. 上下文,所有寄存器的状态 TLB, 中断等等. 
context switch 是一个很重的操作. 需要上千个指令周期才可以完成. 
为了减少进程上下文切换的性能损耗. 
计算机科学增加了线程的概念 线程可能仅需要切换几个寄存器就可以了. 不需要全部进行上下文切换.
并且有了线程的概念之后就有了 线程池的概念 
因为任何资源的create 和 destory 都需要耗费资源和时间. 很多任务其实执行很快
减少这一部分的overhead 能够极大的减少程序运行的时间减少CPU的使用. 

联想到自己使用最多的jvm调优这一块.
栈区里面的栈帧 就是对应不同的线程. 
堆区里面是所有的线程栈共享的区域.
所以并发变成里面最关键的就是 堆区共享资源的隔离与使用.

这也是为JVM有一个逃逸分析后栈上分配的性能要远大于堆上分配.
其实都是内存, allocation的时间是一样的. 但是堆区有很多进行类似于MESI判断的额外开销
但是栈上都是私有的, 不需要做检查和设置, 性能就要快的多, 并且内存分配都是线性的, 比对上需要使用GC等要快速的多. 

有了多线程有了共享, 线程并发的安全就是最大需要考量的地方. 
Threadlocal 就是一个核心解决方案.
但是线程池的存在导致ThreadLocal在线程被get和dispose时需要专门进行一下 clean 不然会出现不可控的权限数据逃逸. 

关于协程的概念
其实协程就是应用程序自己实现了部分线程调度的处理
不管进程和线程, 其实都有跟内核线程的一个对象关系. 
但是协程其实是应用程序自己进行管理和调度的. 能够避免线程的部分寄存器的切换性能损耗
但是对应的, 需要更加注意并发的安全. 

其实大数据的map reduce 也是类似于协程的里面.将不相关的部分应用层切分. 这样就可以最大化的避免因为共享导致的资源损耗. 

学习到的重要的点-3

同步 异步 阻塞 非阻塞
事件循环与事件驱动

这一章的内容其实与最后的IO很贴近了
但是我一直理解的不是很对. 

异步就是不等待结果
同步就是必须等待
同步异步调用方主动的行为
阻塞和非阻塞是被动的行为.
阻塞的应用 其实就是没办法运行了. 异步和非阻塞是可以进行进行下一步的操作. 

CPU的性能提升.离不开乱序,超标量流水线等技术.
其实这些技术的实现才保证了异步 非阻塞的方式可以快速的进行性能调优

epoll等可以一等后面进行总结. 

与计算机底层的秘密读书笔记之一相似的内容:

计算机底层的秘密读书笔记之一

# 计算机底层的秘密读书笔记之一 ## 摘要 ``` 上周天在家休息时在知乎上面看到了影响性能的几个场景. 里面见到了cache的乒乓问题,以及cache line的伪共享问题. 知乎的答案里面图文并茂. 作者的思路也很清晰 就顺着水印找到了公众号还有作者刚出版的一本书. 京东周一快递到手后,这几天

计算机底层的秘密读书笔记之三

# 计算机底层的秘密读书笔记之三 ## IO部分之一 ``` 我感觉IO应该是最可能给人说明白的一个部分了. 也是我这种菜鸟改善应用性能最可能的部分了. CPU内存和cache 很难有优化的空间. 除非是开发去改垃圾代码.后者是升级硬件. 但是IO部分我感觉是有很大的优化空间的. 1.IO多路复用.

计算机底层的秘密读书笔记之二

# 计算机底层的秘密读书笔记之二 ## 内存部分 ``` 内存部分之前自己看过很多资料了: 主要是虚拟内存以及TLB相关的内容 本书的角度与之前角度都不太一样,更加新颖一些. 这次总结想倒着来写. 1. SSD的带宽和延迟都比较好了, 但是是无法代替内存的 内存的寻址可以到字节,然后都是按照内存的位

5.1 汇编语言:汇编语言概述

汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。较于高级语言(如C、Python等),汇编语言学习和使用难度相对较大,需要对计算机内部结构、指令集等有深入的了解,以及具有良好的编程习惯和调试能力。但对于需要对计算机底层进行操作的任务,汇编语言是极其高效的,

Netty(1)——NIO基础

本篇主要介绍Java NIO的基本原理和主要组件 Netty是由JBOSS提供的Java开源网络应用程序框架,其底层是基于Java提供的NIO能力实现的。因此为了掌握Netty的底层原理,需要首先了解Java NIO的原理。 NIO简介 计算机主要由CPU、内存、外存、IO设备等硬件组成,计算机执行

探索计算机的I/O控制方式:了解DMA控制器的作用与优势

对于有科班背景的读者,可以跳过本系列文章。这些文章的主要目的是通过简单易懂的汇总,帮助非科班出身的读者理解底层知识,进一步了解为什么在面试中会涉及这些底层问题。否则,某些概念将始终无法理解。这些计算机基础文章将为你打通知识的任督二脉,祝你在编程领域中取得成功!

认识CPU底层原理(1)——MOSFET

本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除 近年来,由于国内外各种因素影响,半导体行业逐渐被推向风口浪尖,这时人们才认识到,作为早已宣称进入信息化和数字化时代的中国,在计算机基础设施建设上是如此薄弱。 计算机基础

认识 CPU 底层原理(2)——逻辑门

本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除 上一篇文章我们从最基本的粒子的角度认识了组成CPU的最基本单元MOSFET的原理。CPU作为计算机的核心硬件,其最主要的功能是进行运算,本章我们将会介绍CPU设计者是如

空闲空间管理和文件系统结构的优化策略

对于有科班背景的读者,可以跳过本系列文章。这些文章的主要目的是通过简单易懂的汇总,帮助非科班出身的读者理解底层知识,进一步了解为什么在面试中会涉及这些底层问题。否则,某些概念将始终无法理解。这些计算机基础文章将为你打通知识的任督二脉,祝你在编程领域中取得成功!

指令集,架构,软核,硬核的简单学习

指令集,架构,软核,硬核的简单学习 前言 最近一直研究国产化信创知识. 之前的很多总结都比较底层. 今天想着从稍微高一点的角度,尤其是CPU厂商的角度进行分析. 看了很多知乎大神,比如guee等的知识,很有感触. 也想借着周末的时间,学习与总结一下. 国产化的脉络 国产计算机其实从上世纪五十年代就开