oo第八次作业--5,6,7次作业总结

一、多线程的设计

  这三次作业的主要内容就是使用多线程并且解决多线程中出现的问题。而对于多线程我也有了自己的理解。首先明确的一点是单个CPU在同一时间只能处理一件事。那么,不管是多进程还是多线程,我们的CPU只是在其中不停地交换执行,只不过时间太短以至于用户感觉不到,这就是宏观上的并行,微观上的并行。我们的程序在启动的时候就会创建一个主线程,而我们可以在其中继续创建线程来完成我们的任务。

  这样交替执行会带来线程不安全的问题。这样的情况有很多,常见的状态就是在A线程执行一个对共享资源的操作中,被B进程打断(CPU去执行了B进程),但此时,A进程的操作并没有结束,应该改变的某些值还没有改变,那么此时执行的B进程在对共享资源操作的时候必然会出现错误。

  但是,多进程的使用是必然的,否则一些程序并没有任何实际价值。于是,有多种方法可以帮助我们实现代码的同步。Synchronized修饰符可以保证其内部的代码块是同步执行的,这个方法也是这三次作业中主要用到的方法。另外还有加锁机制和唤醒机制。

二、策略与设计

1)第五次作业:三部电梯的多线程设计

  调度器的任务就是预先判断和分装。在电梯中执行的时候是以每一层为粒度,到一层后扫描一遍当前电梯的队列,执行在这一层的请求。主要涉及的线程是主线程,调度器线程和三个电梯线程。共享资源的冲突点在与三个共享队列在不同线程之间被访问时候的线程安全问题。于是,队列采用了vector类。扫描器使用的是timer。

2)第六次作业:ifttt文件监控

  

每一个监控任务有一个成员变量是当前的snapshot(原snapshot)在每隔一定时间后,进行新的snapshot的生成,与原来的snapshot进行比较,如果满足监控作业的要求,则输出。主要的问题在与写文件时候,因此采用每隔5s扫描一次的timer策略来完成。另外,此次作业采用了TestThread线程控制的测试方法,通过程序直接控制文件系统。

3)第七次作业 100辆出租车的调度

有主线程,扫描线程和调度器线程。通过设置成员变量的累计方式,控制单个出租车的状态。

三、度量分析

  1)第五次作业:三部电梯的多线程设计

度量结果和前两次电梯作业的有一定的相似之处,因为调度器有继承,这一点可以从类图上看出来。新的调度器在重写的command_new方法上出现了超出标准的控制流和循环。其次,在电梯类中的remsame方法中,也是有很多控制流和循环。这个方法主要是用于判断并移除同质请求的,因为没有设置为方法,在程序中出现了三次,且判断过程也比较复杂,造成了电梯类内部冗余。

2)第六次作业:ifttt文件监控

主要的问题出现在比较快照的comp方法。在此方法中,需要比较四个监控作业的条件是否满足,需要比较的前提也都比较多,而且对detail.txt文件的输入才在这个方法中。其次就是在建立快照的run方法中,因为要实现将结果写入summary.txt文件中,需要控制流的参与。至于ele类的参数过多这一点是服务于detail.txt文件的输出。

3)第七次作业:100辆出租车的调度 

主要问题在pathlength方法中,此方法是用bfs来计算两点之间的最短距离,对四个方向的遍历需要较多的控制流,且打印路径的操作放在了此方法中,通过一个标志变量控制。

四、bug分析

1)在三部电梯的调度中,出现了一个较大的问题,我尝试了与前两次不同的实现方法,结果考虑不够周全,用错了一个变量,使计算时间的时候产生了累积效应,在电梯类的模拟运动方法中导致时间的计算有错误,于是影响到了程序对到达楼层时间的预判,是一个很大的失误。

2)在文件监控中,没有仔细注意重命名和文件路径移动时需要判断是否是新产生的文件,否则就会导致我删除一个文件却触发了重命名等监控器。

3)设计原则问题,在表示状态的时候用隐含信息的数字表示。

五、发现bug的策略

1)从小处着手,测试基本的功能。

2)造成公共资源的竞争情况,通过观察输出之间的逻辑关系,看是否有矛盾,不合理的情况。

3)大数据的压力测试

六、心得体会

  经历了这几次作业,对线程安全问题的解决停留在同步各个方法的基础层面上,这样操作使得程序运行慢,有些失去了多线程的优势。应该尝试着缩小同步代码块的范围,提高多线程的效率。

  对于有些设计原则的理解还比较浅薄,但是设计原则确实很考验程序员的功底。对于程序来说,仅仅实现功能是不够的,遵循设计原则可以很好地提高代码的复用性和可维护性。以后在设计时需要考虑这些原则,完成一个好的设计。

原文地址:https://www.cnblogs.com/melina/p/8974469.html

时间: 2024-10-23 09:10:03

oo第八次作业--5,6,7次作业总结的相关文章

LMT NEW PBS作业排队运算系统对批处理作业的调度

LMT NEW PBS作业排队运算系统对批处理作业的调度 LMT NEW PBS作业排队调度程序从后备作业中选取若干个作业到内存并投入运行.它为选中作业建立进程并分配必要的资源,这时,这些被选中的作业处于执行状态.PBS作业调度的功能是记录系统中各作业的状况,从后备作业队列中挑选一批作业进入执行状态,以及为被选中作业分配资源建立进程和在作业执行结束后释放所占用的资源等.其中最主要的是从后备作业队列中选取一批作业进入执行状态. 根据不同的目标,将会有不同的调度算法.一般来说,调度目标主要是以下四点

代写android编程作业、代写游戏作业

代写android编程作业.代写游戏作业功能要求分析该游戏要实现的功能描述如下: 关于:可以让玩家了解游戏的一些开发信息等. 帮助:可以让玩家了解游戏的相关玩法,学会如何玩这个游戏. 开始游戏:点击可以进入游戏界面,开始玩游戏. 设置:设置游戏中音乐和音效的开关状态.退出:退出游戏. 练习模式:玩家与系统之间的对战,利用android重力感应让乒乓球进行移动. 对战模式:玩家与玩家之间的对战,利用android重力感应让乒乓球进行移动. 另外,该游戏设计流程主要分三个阶段. 第一个阶段是游戏登录

代写二叉查找树程序作业、代写BST 作业、代写Data Structures

代写二叉查找树程序作业.代写BST 作业.代写Data StructuresKIT205 Data Structures and AlgorithmsAssignment 1: Data StructuresDue: 27th April, 11:55pmIntroductionYou work for an education company that develops and runs Massive Open Online Courses(MOOCs). You have been ask

OO第八次作业

前言 这三次的作业相比之前的难度有了显著的提高,虽然熬夜的日子十分"难过",但是熬完以后还是有很多收获的. 第五次作业 这一次的作业我高估了自己的代码能力,没有在尽早地开始写,后期心态就炸了,最后凭实力得到了一份无效作业.所以类图.度量和分析都没有,直接看第六次作业吧. 第六次作业 首先贴出类图和度量. 也许是有了上一次作业的一点经验,这一次的作业虽然关于文件的内容都是现学的,但是感觉上要比上一次好写.关于线程安全的问题,我基本上都是使用synchrinized解决的,测试的时候也没有

广州八神软件性能测试课程优秀学员作业-第1课-抓包不求人

本文档是广州八神软件性能测试课程学员DI da'da di的第1课-抓包不求人的课后作业.感谢DI da'da di同意分享.作业质量高,有价值,分享给大家共同进步和学习. 课程讨论群:319406535 也可以查看课程的免费部分学习: http://edu.51cto.com/lecturer/index/user_id-387113.html http://www.dataguru.cn/myclassnew.php?mod=new_basicforlesson&op=basic&le

OO先导课——bug与知识(第二次作业)

list排序 http://blog.csdn.net/tjcyjd/article/details/6804690 http://blog.csdn.net/xiaxiaorui2003/article/details/24308785 '改list内容 http://bbs.csdn.net/topics/390846767 'https://zhidao.baidu.com/question/91971366.html retainAll方法求交集 https://zhidao.baidu

2016福州大学软件工程团队展示作业(团队第二次作业)成绩

团队展示成绩如下: 学号 组别 团队展示团队得分 个人贡献比例(百分数) 团队项目分 031402629 606notconnected 12 0.15 12.72 031401433 606notconnected 12 0.15 12.72 031402606 606notconnected 12 0.13 12.62 031402618 606notconnected 12 0.19 12.91 031402631 606notconnected 12 0.19 12.91 0314026

重新提交的作业相较于第一次作业的改进

由于对第一次作业的估计严重失误,导致周二上交的作业是极其不完整的程序,无法正确运行.经过两天的调试,修改了众多BUG以及算法上的不足.以下是修改的主要问题: 1. 栈溢出导致的崩溃:修改了结构体数组变量的相关初始化,大致计算并限定了各函数中变量数组的界限,解决了栈溢出的问题. 2.生成计算式:本程序采用的方法是根据参数计算一个种子,作为间隔,然后按序生成,从而可以较容易的避免产生相同的计算式 (1)该种子的选取一开始存在问题,计算种子的失误导致往往生成的式子无法达到数量要求. (2)操作数的生成

【作业】第三周作业

从第三周开始,作业不再是是老师布置,因为这个时候,你们基本上都开始做项目了, 于是, 作业的来源: 1.书上的课后作业 2.课件上面的随堂讨论或作业 3.你瞎想到的问题 4.[推荐]在实际项目中,结合软件工程知识点,提出作业 最为推荐第四种方式,比如, 关于白盒测试的知识点,结合你的项目实践,就可以得出如下题目: 白盒测试有几种,请结合你的代码片段,一一举例说明,并给出测试用例. 作业的评分,还是10/5/0,三种,请参见: http://www.cnblogs.com/jerry1979/p/