zoukankan      html  css  js  c++  java
  • OO第二次单元总结

    单元总结2

    作业介绍

    项目 内容
    作业内容 多线程电梯

    作业正文

    从多线程的协同和同步控制方面,分析和总结自己三次作业的设计策略

    第一次作业原本的设计是look算法,用自己理解的方式写了多线程控制。但是交上去发现rtle和ctle。最后选择了使用了官方文档生产者与消费者模型,一个请求一个处理,FCFS通过了。修复时候采用了look算法,可以进多个人,效果不错。只有在get时暂时没有等待电梯的人的时候,电梯线程才会暂停。生产者一直put,put以后notifyall。

    第二次一开始使用FCFS秒杀了中测。让消费者线程互相之间竞争。在修复阶段想对第二次作业修改,把托盘从一个请求改为了arraylist,但还是有两个点没过,因为我电梯的人数一直是1;

    第三次电梯增加了调度器。因为有3-6个消费者,类型各不相同,所以我让电梯集中从调度器里面get请求,但是调度器内部请求时分为三部分的。生产者put的时候就根据from楼层将请求分为ABC三类。线程结束是根据三个条件(请求输入结束、电梯外请求清空、电梯内请求清空)在处理电梯内请求的时候,因为需要换乘,所以一个电梯处理完一个请求可能会增加一个电梯外的请求,所以必须三个条件都满足才可以结束线程。

    从功能设计与性能设计的平衡方面,分析和总结自己第三次作业架构设计的可扩展性

    1、电梯内目前只能有一个乘客,还可以扩容。

    2、增加乘客位置以后可以增加捎带,针对电梯特点进行调度优化。

    基于度量来分析自己的程序结构

    以第三次作业为例分析。

    作业3




    类图
    第一次用diagram,还不太会。

    分析自己程序的bug

    共性问题:效率太低。

    作业1 修复后Look算法效率还行。

    作业2 电梯内只能有一个乘客。

    作业3 电梯内只能有一个乘客。

    分析自己发现别人程序bug所采用的策略

    依然是根据当前的要求设计特殊情况的测试用例。并未根据代码设计测试用例。

    特殊情况包括同时大量请求、请求中包含电梯增加请求、特殊楼层

    通过修改生产者类来手动增加请求,如下

    waiting.add(new Request(1,1,2))

    说实话很慢效率很低。

    对比和心得体会

    电梯相比求导,在作业有效性的难度上有所降低。

    线程安全需要注意状态控制,什么时候wait,由谁notify,能不能正常结束。

    设计原则方面,个人觉得电梯部分代码写得还不错,在功能划分、类的封装等方面有进步。在修复时候增加功能、修改代码等的时候,并不会感觉头疼。不过总体规划还是不够。

  • 相关阅读:
    B1005 继续(3n+1)猜想 (25分)
    B1091 N-自守数 (15分)
    B1086 就不告诉你 (15分)
    B1081 检查密码 (15分)
    个人博客作业Week1
    2015个人项目(修改除法要求)
    2014个人博客列表
    最佳个人博客、团队博客评分
    最终评审时间确定
    最终复审要求
  • 原文地址:https://www.cnblogs.com/impuresaint/p/12707155.html
Copyright © 2011-2022 走看看