上药三品,神与气精

曾因酒醉鞭名马 生怕情多累美人


  • 首页

  • 关于

  • 分类

  • 标签

  • 归档

  • 搜索

架构师之路006

发表于 2019-04-27 | 分类于 架构课 | 阅读次数:
字数统计: 158 | 阅读时长 ≈ 1

编程语言出现之后 软件的编写效率得到极大的提升

软件治理的需求

  • 多个软件如何同时运行
  • 共用存储空间
  • 外部设备
  • 如何相互通讯
  • 病毒、恶意软件如何治理

操作系统的启动过程

操作系统的需求演进

软件治理六个子系统

  • 进程管理
  • 存储管理
  • 输入设备管理
  • 输出设备管理
  • 网络管理
  • 安全管理

基础编程接口问题

核心的流量入口

三个商业闭环

  • 账户
  • 支付
  • 应用市场

  • 硬件
  • 操作系统
  • 浏览器

操作系统之进程线程协程

发表于 2019-04-24 | 分类于 os | 阅读次数:
字数统计: 423 | 阅读时长 ≈ 1

两个线程操作同一临界区时,通过互斥锁保护,若A线程已经加锁,B线程再加锁时候会被阻塞,直到A释放锁,B再获得锁运行,进程B必须不停的主动获得锁、检查条件、释放锁、再获得锁、再检查、再释放,一直到满足运行的条件的时候才可以(而此过程中其他线程一直在等待该线程的结束),这种方式是比较消耗系统的资源的。而条件变量同样是阻塞,还需要通知才能唤醒,线程被唤醒后,它将重新检查判断条件是否满足,如果还不满足,该线程就休眠了,应该仍阻塞在这里,等待条件满足后被唤醒,节省了线程不断运行浪费的资源。这个过程一般用while语句实现。当线程B发现被锁定的变量不满足条件时会自动的释放锁并把自身置于等待状态,让出CPU的控制权给其它线程。其它线程 此时就有机会去进行操作,当修改完成后再通知那些由于条件不满足而陷入等待状态的线程。这是一种通知模型的同步方式,大大的节省了CPU的计算资源,减少了线程之间的竞争,而且提高了线程之间的系统工作的效率。这种同步方式就是条件变量。

如果学过java的话,其实就是线程之间的互斥和协作,条件变量就是用来协作的,对应java里wait()和notify()函数。

架构师之路005

发表于 2019-04-24 | 分类于 架构课 | 阅读次数:
字数统计: 0 | 阅读时长 ≈ 1

架构师之路004

发表于 2019-04-24 | 分类于 架构课 | 阅读次数:
字数统计: 925 | 阅读时长 ≈ 3

编程语言的出现,诞生了软件工程师(也叫做程序员)这样一个职业,而汇编语言则可以看做是软件工程师这个分工出现的标志。

通过编程语言,软件工程师和计算机可以进行交互,表达自己的思想。但是,如果我们把掌握编程语言看做是软件工程师的专业技能,其实又低估了编程语言带来的革命性变化。

编程语言在信息科技发展中的位置,如同人类文明中语言所在的位置。而编程语言写出来的软件(及其源代码),如同人类文明中不断被传承下来的图书典籍。

软件是活的书籍,有两个方面的理解

  • 表达方式的多样性
  • 对技术的现场还原

编程范式的进化

  • 过程式 过程式就是以一条条命令的方式,让计算机按我们的意愿来执行 过程式编程最核心的两个概念是结构体和过程。通过结构体对数据进行组合,可以构建出任意复杂的自定义数据结构。通过过程可以抽象出任意复杂的自定义指令,复用以前的成果,简化意图的表达
  • 函数式编程 本质上是过程式编程的一种约束,核心主张是变量不可变,函数尽可能没有副作用。在过程式编程中 数组是一个最常规的数据结构,但是在函数式编程中变量不可变,对某个下标的数组元素的修改,就需要复制整个数组,非常低效。在FP当中,需要通过一种复杂的平衡二叉树来实现一个使用界面(接口)上和过程式语言数组一致的“数组”
  • 面向对象编程 引入了对象(类)和对象方法(类成员函数) 主张尽可能把方式(其实就是过程) 归纳到合适的对象(类)上 不主张全局函数(过程) 面向对象的核心思想是引入契约 基于对象这样一个概念对代码的使用界面进行抽象和封装

两个优点

  • 清晰的使用界面
  • 信息的封装

  • 面向对象还有一个至关重要的概念是接口 通过接口 优雅实现过程式编程当中很费劲才能做到的一个能力: 多态

引入继承的概念 虽然带来了编码上的便捷性 但是带来了不必要的心智负担 本来复合对象的唯一构造方法是组合 现在多了一个选择 继承

GO语言的设计 是放弃了继承 全面强化组合

官方宣称是面向连接的语言 面向连接就是朴素的组合思想 研究连接 就是研究人与人如何组合 研究代码之间怎么组合

消息传递是多核背景下流行起来的一种编程思想 尽可能用消息传递来取代共享内存 从而尽可能避免显式的锁 降低编程负担

不只是提供了语言内建的消息传递机制 还因为消息传递是类型安全的 大大降低了犯错的机会

  • 包
  • 版本
  • 文档生成
  • 单元测试

语言对架构的影响是什么??

  • 选择某种语言无关的接口表示
  • 选择团队开发时采用的语言来描述接口

  • 决策之一是开发效率

  • 其二是后期的维护

架构师之路003

发表于 2019-04-23 | 分类于 架构课 | 阅读次数:
字数统计: 335 | 阅读时长 ≈ 1

CPU指令是一个有限的指令集 CPU执行的指令序列不是固定的 依赖于保存在存储中的数据 由软件工程师编写的软件决定

程序是计算机的灵魂

指令序列的可能性是无穷的 程序的可能性是无穷的 今天计算机创造的世界如此多姿多彩 正是得益于程序无穷的可能性

史前时代 为了解决编程效率的问题 汇编语言出现了

编译器将汇编语言写的程序编译为CPU指令序列 并将其保存到外置的存储设备(如硬盘)上

汇编语言解放的生产力是惊人的 有选择的话 没有人愿意用0101这样的东西来表达自己的思想


键盘和显示器的驱动程序

主流的外置存储设备

汇编程序编辑器

汇编编译器

可以执行一段保存在外置存储设备中的机器代码程序

不变的是 存储 编辑器 和 鼠标键盘磁盘的驱动程序和这些程序存储的位置

变化的是 用户输入的指令序列和位置 因为用户的输入的内容 可以由计算机来指定位置自动存储。

1…111213…109
John Cheung

John Cheung

improve your python skills

543 日志
33 分类
45 标签
RSS
GitHub Email
© 2020 John Cheung
本站访客数:
|
主题 — NexT.Pisces v5.1.4
博客全站共226.3k字