<script>
function
lowerbound(arr,target)
{
let N = arr.length;
let low=0;
for
(let i=0;i<N-1;i++)
{
if
(arr[i]<target && arr[i+1]>=target)
{
low = i+1;
break
;
}
}
if
(arr[0]>target)
return
0;
return
low;
}
function
printLoadOnEachServer(m, loadOnServer)
{
for
(let i = 0; i < m; i++) {
document.write(i + 1,
" st Server -> "
, loadOnServer[i],
".<br>"
);
}
}
function
loadBalancing(n, m, arrivalTime, processTime)
{
let loadOnServer =
new
Array(m).fill(0);
for
(let i = 0; i < m; i++) {
loadOnServer[i] = 0;
}
let busyServers = [];
let availableServers =
new
Set();
for
(let i = 0; i < m; i++) {
availableServers.add(i);
}
let temp_arr = Array.from(availableServers).sort((a, b) => a - b);
availableServers =
new
Set(temp_arr);
for
(let i = 0; i < n; i++) {
let endTime = arrivalTime[i] + processTime[i];
while
(busyServers.length > 0 && busyServers[0][0] <= arrivalTime[i]) {
let releasedServer = busyServers[0];
busyServers.shift();
availableServers.add(releasedServer[1]);
temp_arr = Array.from(availableServers).sort((a, b) => a - b);
availableServers =
new
Set(temp_arr);
}
if
(availableServers.length > 0) {
continue
;
}
let demandedServer = i % m;
let availableServers_temp = Array.from(availableServers);
let itr = lowerbound(availableServers_temp, demandedServer);
if
(itr == availableServers_temp.length) {
itr = availableServers_temp[0];
}
let assignedServer = availableServers_temp[itr];
loadOnServer[assignedServer]++;
availableServers.
delete
(assignedServer);
busyServers.push([endTime,assignedServer]);
busyServers.sort(
function
(x, y){
if
(x[0] == y[0])
return
x[1] - y[1];
return
x[0] - y[0];
});
}
printLoadOnEachServer(m, loadOnServer);
}
let arrivalTime = [ 1, 2, 4, 6 ];
let processTime = [ 7, 1, 4, 4 ];
let N = arrivalTime.length;
let M = 2;
loadBalancing(N, M, arrivalTime, processTime);
</script>