《程序员的自我修养》

  首先来大致说一下读这本书的感觉,可以说对于我自己而言,是第一次对于编程有了个纯粹的认识,或者说的更明确一点,是对整个操作系统有了一个大致的感觉。虽然自己这一年也算是写了一些代码,你让我去写个什么小程序也没什么问题,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. SpringBoot @ConfigurationProperties报错

    idea报错如下: Not registered via @EnableConfigurationProperties or marked as Spring component less... (C ...

  2. 【mysql】VS2017 EF使用 mysql

    要在vs2017中能打开mysql的连接,需要安装以下扩展 mysql-connector-net-6.9.9+.msi [这里注意不要下载最新8.x.y版本,有坑]mysql-for-visuals ...

  3. WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递 【转】

    原文:http://www.cnblogs.com/lori/p/4045633.html 下面定义一个复杂类型对象 public class User_Info { public int Id { ...

  4. 学习笔记:AJAX 跨域问题

    学习笔记:AJAX 跨域问题 AJAX 跨域是浏览器的问题. 只要 xhr 请求,不同的域名就会出现 AJAX 跨域问题. JSONP 是一要简单方式,但是有很多弊端,需要修改服务端代码. JSONP ...

  5. MySQL 8 连接时出现 1251 和 2059 错误

    MySQL 8 连接时出现 1251 和 2059 错误 原因是MySQL 8 改了密码加密算法.1 原来是:mysql_native_password MySQL8 改成了 caching_sha2 ...

  6. bzoj1503[NOI2004]郁闷的出纳员——Splay

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1503 好奇怪呀!为什么而TLE? 各种修改终于卡时过了.可是大家比我快多了呀?难道是因为自己 ...

  7. Errors running builder 'DeploymentBuilder' on project ' 解决方法

    此问题一般发生在Myeclipse 保存文件并自动部署时候. Errors occurred during the build. Errors running builder 'DeploymentB ...

  8. linux误删数据恢复

    linux下数据恢复工具有: 1.通过分析文件系统的日志,解析文件的inode,可以恢复ex3 ex4的文件系统下的数据 extundelete:扫描inode和恢复数据同时进行,因此恢复速度很快.支 ...

  9. Qt学习笔记(1) hello world

    Qt的简介: Qt是一个跨平台的C++ GUI库实现,原本只是以为它只提供一些图形接口,看来我还是低估了它,采用文档Qt学习之路2开始学习,不知道这个文档是不是有点老了,管他呢,先了解下. 搭建环境: ...

  10. [Java.Web][Servlet]常用请求头

    response.setStatus(302); response.setHeader("location", "/day04/1.html"); 这段代码可以 ...