当前位置:首页>开发>正文

nginx代理负载均衡的调度算法都有哪些 操作系统磁盘调度算法wenti

2023-04-23 15:15:59 互联网 未知 开发

 nginx代理负载均衡的调度算法都有哪些 操作系统磁盘调度算法wenti

nginx代理负载均衡的调度算法都有哪些

利用nginx作反向代理apache直接暴露给外界同nginx主要做负载均衡提升系统并发承载能力nginx处理静态内容apache处理态内容加快站点访问速度建议解nginx反向代理

操作系统磁盘调度算法wenti

SCAN调度算法就是电梯调度算法,顾名思义就是如果开始时磁头往外就一直要到最外面,然后再返回向里(磁头编号一般是最外面为0号往里增加),就像电梯若往下则一直要下到最底层才会再上升一样。这里的从左端开始是什么意思呢?一般是题目中会给出此时磁头指向里或是指向外的。向外则向比它小的方向扫描,向里则向比它大的方向扫描,而若求寻道时间还要知道每移动一个磁道所需的时间t,寻道时间T1={(53-37) (37-14) (14-0) (65-0) (67-65) (98-67) (122-98) (124-122) (183-124) (199-183)}*t=(53 199)*t=252t.
CSCAN循环扫描调度算法是先找出最靠近磁头位置的下一个,或是按题中规定的方向,反正就是只能是单向扫描。例如题中65距53最近,于是最先到65然后继续朝增加的方向,直到最大,然后又立即回到最小的0号开始,计算时返回的那段距离也必需计算在内。T2={(199-53) (199-0) (37-0)}*t=382t.
显然此时SCAN算法更省时。

处理机调度算法的实现

操作系统实验嘛,今学期刚做过~附上代码:

#include "stdio.h"
#include
#include
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0


struct pcb { /* 定义进程控制块PCB */
char name[10]
char state
int super
int ntime
int rtime
struct pcb* link
}*ready=NULL,*p


typedef struct pcb PCB


void sort() /* 建立对进程进行优先级排列函数*/
{
PCB *first, *second
int insert=0
if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/
{
p->link=ready
ready=p
}
else /* 进程比较优先级,插入适当的位置中*/
{
first=ready
second=first->link
while(second!=NULL)
{

if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/

{ /*插入到当前进程前面*/

p->link=second

first->link=p

second=NULL

insert=1

}
else /* 插入进程优先数最低,则插入到队尾*/

{

first=first->link

second=second->link

}
}
if(insert==0) first->link=p
}
}


void input() /* 建立进程控制块函数*/
{
int i,num
system("cls") /*清屏*/
printf(" 请输入进程数: ")
scanf("%d",&num)
for(i=1i<=numi )
{
printf(" 进程号No.%d: ",i)
p=getpch(PCB)
printf(" 输入进程名:")
scanf("%s",p->name)
printf(" 输入进程优先数:")
scanf("%d",&p->super)
printf(" 输入进程运行时间:")
scanf("%d",&p->ntime)
printf(" ")
p->rtime=0p->state=W
p->link=NULL
sort() /* 调用sort函数*/
}
}


int space()
{
int l=0
PCB* pr=ready
while(pr!=NULL)
{
l
pr=pr->link
}
return(l)
}


void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/
{
printf(" 进程名 状态 优先数 需要运行时间 已经运行时间 ")
printf("|%s ",pr->name)
printf("|%c ",pr->state)
printf("|%d ",pr->super)
printf("|%d ",pr->ntime)
printf("|%d ",pr->rtime)
printf(" ")
}


void check() /* 建立进程查看函数 */
{
PCB* pr
printf(" **** 当前正在运行的进程是: ") /*显示当前运行进程*/
disp(p)
pr=ready
printf(" **** 当前就绪队列状态为: ") /*显示就绪队列状态*/
while(pr!=NULL)
{
disp(pr)
pr=pr->link
}
}


void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/
{
printf(" 进程 [%s] 已完成. ",p->name)
free(p)
}


void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/
{
(p->rtime)
if(p->rtime==p->ntime)
destroy() /* 调用destroy函数*/
else
{
(p->super)--
p->state=W
sort() /*调用sort函数*/
}
}


void main() /*主函数*/
{
int len,h=0
char ch
input()
len=space()
while((len!=0)&&(ready!=NULL))
{
ch=getchar()
h
printf("-----------------------------------------------------")
printf(" 现在是第%d次运行: ",h)
p=ready
ready=p->link
p->link=NULL
p->state=R
check()
running()
printf(" 按任意键继续...... ")
}
printf(" 进程已经完成. ")
}

29、Java中用到的线程调度算法是什么?

操作系统的核心,它实际就是一个常驻内存的程序,不断地对线程队列进行扫描,利用特定的算法(时间片轮转法、优先级调度法、多级反馈队列调度法等)找出比当前占有CPU的线程更有CPU使用权的线程,并从之前的线程中收回处理器,再使待运行的线程占用处理器。