OO第二单元优化博客
OO第二单元优化博客
第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同。
总计一下look算法的几个特点:
1、没有主次请求的区分。
2、电梯会一直往当前方向运行直到需要转向,转向条件为:
(1)当前电梯中没有乘客的目的楼层在当前方向上。
(2)当前方向上的楼层目前没有请求。
3、捎带时只捎带请求与当前方向相同的乘客。
(由于第五次第六次作业没有容量限制,所以可以把当前楼层上的所有请求全部拿进来)
另外,还有一些奇怪的优化:
1、在\(close\)和\(arrive\)时候记一下时间\(t_1\),下一次运行的时候可以根据当前时间\(t_2\),少\(sleep(t_2-t_1)\)的时间。
2、若电梯长时间没有收到请求,可以利用休息的时间\(t\),根据下一次需要到达的楼层来节约时间。
在第五次作业中,每次可以节约\(min([t/500ms],|target-now|)*500ms\)的时间;
在第六、七次作业中,由于需要输出\(arrive\),最多每次能节约\(400ms\)
这种反现实优化被我们称为“薛定谔电梯”,直观上来看,就是100%预测下一次的运行方向和楼层数,休息的时候直接往那里走,被称为薛定谔是因为:在你给出下一个请求之前,你永远不知道我的电梯到底在哪(第五次作业)。
关于架构上的感悟&多电梯:
第五次作业的\(CPU\) \(time\)限制支持暴力轮询;
第六次第七次大部分同学应该都用的\(wait\¬ify\),为了代码复用和简单架构,我在暴力轮询的循环里加了\(sleep(10)\),就能够控制\(CPU\) \(time\)在\(1s\)左右。
没有请求队列,模拟现实生活中的楼房\(Building\)类和楼层\(Floor\)类,将请求无条件放在对应楼层,电梯再去取人,所有的同步锁都只放在\(Floor\)类中,避免死锁。
多电梯中,将\(A,B,C\)三部电梯对应到三个不同的\(Building\)对象,用一个分配器分配,分配策略为平均(摸了)。
OO第二单元优化博客的更多相关文章
- OO第一单元优化博客
OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)\)和\(cos(x)\)的指数作为坐标,在图上画出来就可 ...
- BUAA_OO第二单元总结性博客作业——多线程电梯架构
一.设计策略 在第一次作业时,我刚第一次接触多线程这个东西……于是乎对于第一次VIP直上直下一次只接一个人的电梯,我借鉴了指导书中为我们提供的架构,设计了一个输入线程和一个电梯线程,并设置了一个中间类 ...
- oo第二单元作业总结
oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电 ...
- OO第4次博客作业
OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...
- 【OO学习】OO第二单元作业总结
OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...
- OO第二单元小结
OO第二单元小结 一.三次作业代码分析. 1.第一次作业 第一次作业是单部电梯的傻瓜调度,由于其过分傻瓜,所以第一次作业我只有两个类,一个main,一个电梯,main类负责不断从输入流中读取命令,如果 ...
- OO第二单元多线程电梯总结
OO第二单元多线程电梯总结 第一次作业 设计思路 Input为输入线程,负责不断读取请求并将读到的请求放入调度器中. Dispatcher为调度器,是Input线程和Elevator线程的共享对象,采 ...
- [BUAA OO]第三次博客作业
OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...
- OO第三次博客作业——规格
OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
随机推荐
- CSS3_盒子背景
盒子背景 盒子背景:content padding 特殊的 boder 背景 背景绘制 从 padding 开始绘制 背景裁剪 background-clip(默认值 border-box ...
- 目录的rwx权限的意义
1.目录的r:列举查看目录下的内容 2.目录的w:向目录中写东西,如创建文件 3.目录的x:可以cd进去 例:查看/etc/passwd内容: `:对/有rx权限 `:对/etc/有rx权限 `:对/ ...
- [SDOI2009]SuperGCD
题目链接 这题.高精度.恶心.难受. 那么高精度的gcd怎么做呢? 若a=b gcd(a,b)=a ①a偶b偶 gcd(a,b)=2*gcd(a/2,b/2) ②a偶b奇 gcd(a,b)=gcd(a ...
- 配置 Tomcat 以服务方式自动运行
接手一台用 Tomcat 跑着 Java Web 应用的 Linux CentOS 服务器,通过镜像的方式更换服务器后站点无法访问,发现是因为 Tomcat 不能在服务器启动后自动启动,于是基于 in ...
- OO第一次博客作业--第一单元总结
OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...
- vue中打包后vendor文件包过大
vue中webpack打包后vendor.xxx.js文件一般都特别大,其原因是因为我们引用的依赖都被压缩成一个js文件,这样会导致vendor文件过大.页面加载速度过慢,影响用户体验.所以我们就要把 ...
- WinAPI 字符及字符串函数(9): lstrcat - 合并字符串
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- Delphi 的内存操作函数(2): 给数组指针分配内存
静态数组, 在声明时就分配好内存了, 譬如: var arr1: ..] of Char; arr2: ..] of Integer; begin ShowMessageFmt('数组大小 ...
- python练习题-day22
1.编写程序, 编写一个学生类, 要求有一个计数器的属性, 统计总共实例化了多少个学生 class Student: count=0 def __init__(self,name,age,gender ...
- mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8
mysql扩展性架构实践N库到2N 库的扩容,2变4.4变8 http://geek.csdn.net/news/detail/5207058同城 沈剑 http://www.99cankao.com ...