《程序员的自我修养》

  首先来大致说一下读这本书的感觉,可以说对于我自己而言,是第一次对于编程有了个纯粹的认识,或者说的更明确一点,是对整个操作系统有了一个大致的感觉。虽然自己这一年也算是写了一些代码,你让我去写个什么小程序也没什么问题,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. macOS -- 为什么XAMPP启动后输localhost跳转到http://localhost/dashboard?

    在XAMPP环境下,当我们在地址栏输入'localhost'的时候,进入的不是htdocs根目录下,而是直接跳转到了http://localhost/dashboard?下. 这是因为在xamppfi ...

  2. Ubuntu 破解密码及用户管理

    Ubuntu 破解密码及用户管理 ubuntu 16.04 破解密码 useradd 实现以下要求 1.ubuntu16.04破解密码 2.创建下面的用户.组和组成员关系 名字为xipudata 的组 ...

  3. Python 函数 memoryview()

    memoryview() 函数返回给定参数的内存查看对象(Momory view). 所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问.返回元组列表 ...

  4. 在Qt中如何使用QtDesigner创建的UI文件(一) (转)

    使用Qt有一些时间了,一直在IDE环境(qtcreator和VS2003+集成器)中使用,自然少了很多麻烦的步骤.但是在享受这种便利的同时,我们也失去了理解更多知识背后的点滴.在IDE中,如果我们要开 ...

  5. CF 1093E Intersection of Permutations——CDQ分治

    题目:http://codeforces.com/contest/1093/problem/E 只能想到转化成查询一个区间里值在一个范围里的数的个数…… 没有想到这样适合用主席树套树状数组维护.不过据 ...

  6. bzoj1040(ZJOI2008)骑士——基环树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1040 基环树的模板. 套路就是把环断开,先把一端作为根节点,强制不选:再把另一端作为根节点, ...

  7. 安装 LAMP

    卸载 并安装 MYSQL rpm -qa | grep mysql rpm -e mysql-libs--.el6.x86_64 -.el6.x86_64 cd /usr/local/src/ wge ...

  8. php 运行模式

    1.php最常见的五种运行模式. CGI 通用网关接口 FastCGI 常驻内存的CGI CLI 命令行 Web模块  Apache等Web服务器 模块的形式加载php进程 ISAPI 已经不用了 2 ...

  9. java根据特定密钥对字符串进行加解密

    package com.test; import java.io.IOException; import java.security.SecureRandom; import javax.crypto ...

  10. appium+python自动化30-list定位(find_elements)

    前言 有时候页面上没有id属性,并且其它的属性不唯一,平常用的比较多的是单数(element)的定位方法,遇到元素属性不唯一,就无法直接定位到了. 于是我们可以通过复数(elements)定位,先定位 ...