问题诞生
在一次代码review中,被老板喷了下为啥用switch而不用if;对此有点疑惑,当时的理由是:写switch会遗漏break,导致代码出现异常逻辑;当使用switch时,若break漏写的确会导致代码逻辑错误;但这理由并不充分,那么switch到底有啥优点呢?
下面我们探寻下switch的原理!
在操作系统出现之前,程序曾经存放在卡片上,计算机每读一张卡片,就运行一条指令,这个时候程序是直接从卡片到执行;但这种从外部存储媒介上直接执行指令的做法效率极低,且灵活性很差,一次只能一个卡片来处理;因此人们发明了内存存储器,来将需要运行的程序先行加载,再自动执行,从而提高效率和灵活性。
由于内存的出现,出现了“存储的程序”概念的出现,而存储的程序概念又导致计算机及软件系统的革命性变化,此后人们对内存的要求越来越高。
理想的情况下,程序员或用户对内存的要求是:大容量,高速度和持久性。但程序员面临的物理现实却是一个由缓存、主存、硬盘等组成的内存架构。
缓存的特点:低容量、高速度、高价格;
主存的特点:中容量、中速度、中价格;
硬盘的特点:大容量、低速度、低成本;
这样的存储架构和程序员、用户的期望相差较大;要以现在的架构为程序员所需的内存抽象,需要一个巧妙有效的内存管理机制。
计算机操作系统是一门“人造的”系统;处处都透露这人类的思考惯性,人性的哲学原理。从人类本身的处理角度去理解操作系统中线程的各种原理是很有必要的,会让你对线程的理解更加深刻。
如我们所知,进程是一段运转的程序,是为了CPU上实现多道编程而发明的一个概念。在操作系统层面,进程是一系列计算机指令的聚合。当进程遇到阻碍时,比如用户输入等,会阻塞整个进程;后续跟输入无关的指令也得不到执行;因此,把进程中的指令分为几份不同的功能;每一份就是所谓的“线程”。
基于上述的描述,我们对线程进行定义:线程就是在进程里一个单独的顺序控制流。至于进程把哪些指令切分成进程,后面文章再进行分析。下面我们开始养金鱼。
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
1 | $ hexo new "My New Post" |
More info: Writing