# 电梯调度算法 **Repository Path**: wanghehan/elevator-scheduling ## Basic Information - **Project Name**: 电梯调度算法 - **Description**: 电梯调度算法、多线程、锁、Scokt - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-05-24 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目介绍 电梯调度 # 技术 java、maven 多线程、Socket、锁 # 电梯调度算法 ## 1、第一版 第一版的主要思路:设计一个多电梯一中控的系统,系统运行核心是电梯主动去寻找最短距离目标楼层,如下图。 目标来自三个表:电梯内部点亮的楼层为一个表、每个楼层点亮需要上升的为一个表、每个楼层点亮需要下降的为一个表。 ![输入图片说明](READMEIMG/1.png) 缺点:非常耗费资源,每个电梯为一个子线程,一个中控为主线程,每个子线程会不断的去获取"目标",然后执行到达目标楼层,直到目标列表都为空为止。 所有的子线程都会处于一直活跃找目标的状态。需要处理多线程之间资源争夺的问题。 ## 2、第二版 第二版设计目标: 设计一个多电梯一中控的系统(多线程争夺资源),系统运行核心是以(外部)按下一个楼层为一次“请求”,去寻找可调用的电梯(每个电梯为一个线程), 每个电梯内部有一张表,记录本电梯需要到达的楼层。中控有两张表记录外部按下需要上行、下行的楼层。 主要思路:以楼层为资源,一个电梯为一个线程,由多个线程去消费目标楼层。 每个线程有序消费资源表,公共资源按照目标楼层(根据电梯自身状态确定)、最小距离(根据目标楼层与电梯当前所在楼层确定)、有效目标(根据最小距离的比较确定)分配给线程。 **电梯状态**:静止、上行、下行 **资源消费表**:对于每个电梯可消费的资源来自三张表, 一张是每个电梯内部存储到达楼层表,仅供当前电梯消费, 一张是外部的上行楼层表,每个电梯抢夺消费, 一张是外部的下行楼层表,每个电梯抢夺消费。 **目标楼层**:指待电梯需要到达的楼层。 静止电梯的目标楼层,包含三个资源消费表里所有的楼层。 上行电梯的目标楼层,包含三个资源消费表里所有大于本电梯所在楼层的楼层。 下行电梯的目标楼层,包含三个资源消费表里所有小于本电梯所在楼层的楼层。 **最小距离**:指待电梯需要到达的最近楼层。 例1,一个上行电梯在五楼,4楼、6楼、7楼是目标楼层里包含的楼层,那么6楼就是最小距离。 例2,一个静止电梯在五楼,4楼、6楼、7楼是目标楼层里包含的楼层,那么6楼就是最小距离,因为默认上行优先。 **有效目标**:指目标楼层中自身的最小距离,且小于其他任何同向电梯最小距离的目标。 例如,电梯1在三楼正上行,电梯2在二楼正上行,5楼是目标楼层,那么5楼是电梯1的有效目标,而不是电梯2的有效目标。 电梯失去有效目标就会进入 “最小距离”计算 -> 有效目标抢夺(谁距离更小谁抢夺成功),如果抢夺有效距离失败就会静止。 什么时候会进行“有效目标抢夺”,当同向电梯数量大于等于目标楼层数量时。 ![输入图片说明](READMEIMG/2.png) ![输入图片说明](READMEIMG/3.png)