《程序员的自我修养》

  首先来大致说一下读这本书的感觉,可以说对于我自己而言,是第一次对于编程有了个纯粹的认识,或者说的更明确一点,是对整个操作系统有了一个大致的感觉。虽然自己这一年也算是写了一些代码,你让我去写个什么小程序也没什么问题,debug也算是用的熟练。但是,每次如果让我换一台新的电脑去编程,心里真的是发怵。一旦什么编译环境,编码之类的出了问题,整个人就可怜又无助了。究其原因,是对于编程一事仅仅掌握了最表层的东西,也就是说,所有都编程都是在照葫芦画瓢而已。而这本书算是解决了一些我在这方面的迷惑。

  操作系统的重要性

  实际上,这学期的另外两门课在这方面给予我了很明显的感受。一个是微机原理,另一个是电设实践。这两门课都有编程,一是最简单的汇编语言,另一个虽然是我熟悉的c语言,但是对于单片机的功能使用方面,尤其是有关中断的,也让我花费了大量的是时间去了解。

  在用惯了高级语言以后,再一次的返回来去写这些最底层的语言,真的是让我倍感难受。尤其是在汇编的编程中,频繁的从存储器和寄存器中存取数据,让人不胜其扰。同时开始无限怀念高级语言,只要设定一个变量,就啥都不用我管了hhh

  而在电设里面,单片机的代码编写让我第一次对于优先级有了一个较为明确的概念,虽然只是一个简单的中断优先级,但根据实际功能的实现,却要谨慎再谨慎的去设定。

  同样,这两方面,一是内存的管理,一是优先级的管理,都被操作系统一个人给解决了。这里插一句题外话,就是曾听说过 linux 系统的源码就是用c写了1w多行,虽然一直没有去读过,但这种操作真的是惊为天人。实际上的实现,采用了线程的方式,就我个人简单的理解,cpu的确每一时间只能解决一件事情,但如果以一个较快的频率去在几件事情之间切换执行,从外部看起来呢,就和同时执行好几件事无异了。如同书中所说“并发实际上是一种模拟出来的情形”

  紧接着,书中提出了一个经典的例子:

  直观来说,执行结束后的 i 毫无疑问是0。但是,计算机在执行这些指令的时候,并不像我们看起来这么直观,因为一切的运算,都要在寄存器里执行,而不能在存储器里面,毕竟他没这个功能。那么,如果两个线程都被巧妙地割裂开来,就会导致问题的出现。

  实际的处理中,很容易想到,就是先强迫线程1中的++i完成,再去执行--i,也就是说,i是一个不可分割的线程,被定义为原子操作。

读书笔记 Week7 2018-4-24的更多相关文章

  1. 读书笔记 Week7 2018-4-19

    <构建之法> 第十二章 用户体验 读书笔记 首先不得不说,现如今大部分的电脑使用者,都被微软的图形化界面把口味养刁了.当然,包括我自己.无论是在微机原理上级的时候使用那些带着浓郁的上世纪八 ...

  2. Python基础教程【读书笔记】 - 2016/7/24

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第九波:第9章  魔法方法.属性和迭代器  在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.已 ...

  3. 读书笔记 effective c++ Item 24 如果函数的所有参数都需要类型转换,将其声明成非成员函数

    1. 将需要隐式类型转换的函数声明为成员函数会出现问题 使类支持隐式转换是一个坏的想法.当然也有例外的情况,最常见的一个例子就是数值类型.举个例子,如果你设计一个表示有理数的类,允许从整型到有理数的隐 ...

  4. 读书笔记-《Maven实战》-关于Maven依赖传递的思考 2018/4/26

    上次读书笔记中,提到了依赖传递.看着依赖传递表,一直在思考为什么会是这样. 先看传递表: compile test provided runtime compile test provided run ...

  5. 【2018.08.13 C与C++基础】C++语言的设计与演化读书笔记

    先占坑 老实说看这本书的时候,有很多地方都很迷糊,但却说不清楚问题到底在哪里,只能和Effective C++联系起来,更深层次的东西就想不到了. 链接: https://blog.csdn.net/ ...

  6. TJI读书笔记17-字符串

    TJI读书笔记17-字符串 不可变的String 重载”+”和StringBuilder toString()方法的一个坑 String上的操作 格式化输出 Formatter类 字符串操作可能是计算 ...

  7. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

  8. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  9. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

随机推荐

  1. 《DSP using MATLAB》示例Example 6.9

    代码: % All-Pole IIR filter to Lattice structure filter a = [1, 13/24, 5/8, 1/3]; K = dir2latc(a) % To ...

  2. Spring Boot 入门之 Web 篇(二)

    原文地址:Spring Boot 入门之 Web 篇(二) 博客地址:http://www.extlight.com 一.前言 上一篇<Spring Boot 入门之基础篇(一)>介绍了 ...

  3. 扩充 jQuery EasyUI Datagrid 数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)

    客户需求: jQuery EasyUI Datagrid 用户列表鼠标悬停/离开数据行时显示人员头像(onMouseOver/onMouseOut) 如图所示,Datagrid 鼠标悬停/离开数据行时 ...

  4. 【转】redis GEO地理位置

    redis目前已经到了3.2版本,3.2版本里面新增的一个功能就是对GEO(地理位置)的支持. 地理位置大概提供了6个命令,分别为: GEOADD GEODIST GEOHASH GEOPOS GEO ...

  5. php 必须了解提升的知识

    https://blog.csdn.net/m18513057343/article/details/78974292

  6. JAVASE02-Unit012: Unit07: XML语法 、 XML解析

    Unit07: XML语法 . XML解析 emplist.xml <?xml version="1.0" encoding="UTF-8"?> & ...

  7. ssdb的golang驱动的同步问题

    如果数据库连接只有一个,在某个时间点(指的是某个及其短的时间内),多个读写的话,会出问题,修改了下,加了个mutex,算是解决了此问题,贴下备忘 var mutex sync.Mutex func ( ...

  8. Jquery学习小计

    实时监听输入框值变化 首先创建Jquery.fn扩展 jQuery.fn.extend({ inputChange: function(callback){ if($.support.leadingW ...

  9. Java-Runoob:Java StringBuffer 类

    ylbtech-Java-Runoob:Java StringBuffer 类 1.返回顶部 1. Java StringBuffer 和 StringBuilder 类 当对字符串进行修改的时候,需 ...

  10. Nginx限制服务地址

    今天要在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网,从网络上搜到以下解决方案. 我们在使用的时候会遇到很多的恶 ...