《计算思维导论:程序设计思想与方法》——第9章:模拟与并发

计算有两个特点:第一,计算是确定的,即只要输入相同,程序执行后得到的结果总是一样的;第二,程序在任意时刻只做一件事,不能同时做多件事。这是传统程序的典型特征。
不属于典型形式的计算形式:一种是能够处理随机现象的模拟方法,一种是能够同时做多件事的多线程并发。这两种计算形式的共同特点是不确定性,即针对同样的输入,同一程序可能有不同的执行过程和结果。

9.1 模拟
9.1.1 计算机建模
  1. 利用计算机解决现实中的问题,首先需要在计算机中将问题表示出来,这个过程称为建模(modeling),即建立描述现实问题的一个模型(model)。
  2. 混沌现象,是指在确定性系统中发生的看上去随机、不规则的运动,即用确定性理论描述的系统却表现出不确定的行为。混沌现象的特征是不可预测性和对初始条件的极端敏感性。
9.1.2 随机问题的建模与模拟
  • 随机数生成函数
  1. Python语言提供了一个标准库模块random,该模块中定义了若干种伪随机数生成函数。random模块中用得最多的随机数生成函数是randrange和random。
  2. randrange函数生成一个给定范围内的整型伪随机数,范围由randrange的参数指定,具体格式和range函数一样。
    在这里插入图片描述
  3. random函数可用来生成浮点型伪随机数,确切地说,该函数生成[0,1)区间中的浮点数。random不需要提供参数。
    在这里插入图片描述
  • 模拟
9.1.3 编程案例:乒乓球比赛模拟
  • 球员技术水平的表示
  • 模拟一回合比赛与得分
  • 模拟一局比赛
  • 模拟一场比赛
  • 完整程序
9.2 原型法
  1. 原型法的思想是,先开发一个简单版本,即功能少、界面简单的版本,然后再对这个简单版本逐步进行改善(添加或修改功能),直至完全满足用户需求。初始精简版程序称为原型(prototype)。应用原型法来进行软件开发的步骤大致如下:
  • 确认基本需求
  • 创建原型
  • 向用户演示或交付用户试用,获得反馈意见
  • 改善原型:回到(3),重复(3)(4),直至用户最终认可。
9.3 并行计算
9.3.1
  1. 计算机执行程序时,如果采用按顺序执行的方式,即仅当一个程序执行完毕,下一个程序才能开始执行,则称为串行(serial)执行。
  2. 多个相互独立的程序交叉执行的方式称为并发(concurrent)执行。并发执行的多个程序的起止时间是交叉重叠的,而不是串行执行方式下的前后相继。
  3. 如果计算机系统中有多个处理器,那么就可以做到真正的多个程序“同时”执行,因为各CPU可以在同一时刻执行各自的指令,为了与单一CPU上的并发相区别,我们称这种执行方式为并行(parallel)执行。
9.3.2 进程与线程
  1. 操作系统控制处理器在多个程序之间切换执行的过程称为调度。传统的多任务操作系统是以进程为单位进行调度的。
  2. 进程(process)是指程序的一次执行所形成的实体,每当程序开始执行,就会创建个进程。
  3. 每个进程都程序代码以及一些状态信息(如进程数据的当前值和当前执行点等)组成,状态信息也称为进程的上下文。
  4. 线程与进程既类似又有明显区别。系统中的多个进程一般是由执行不同程序而创建的,而多个线程是同一程序(进程)的多个执行流;多个进程的状态是各自独立的,而多线程可以共享地址空间(代码和上下文);调度进程时上下文切换比多线程的上下文切换开销大;进程间通信比较麻烦,而线程之间通过共享内存很容易通信。
9.3.3 多线程编程的应用
9.3.4 Python多线程编程
  1. Python提供了两个支持线程的模块,一个是较老的thread模块,另一个是较新的threading模块。其中threading采用了面向对象实现,功能更强。
  • thread模块的用法
  1. 任何程序一旦开始执行,就构成了一个主线程。在主线程中随时可以创建新的子线程去执行特定任务,并且主线程是并发执行的。
  2. 每个线程的生命期包括创建、启动、执行和结束四个阶段。
  • threading模块的用法
  • 并发计算中的同步问题
9.3.5 小结
9.4 练习

书籍下载地址:https://download.csdn.net/download/qq_37590544/10959608

猜你喜欢

转载自blog.csdn.net/qq_37590544/article/details/87856667