barriers / 阅读 / 详情

操作系统的时间片轮转法具体的算法

2023-08-01 20:43:00
共1条回复
CarieVinne
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!
四、算法实现
1)系统初始化时给每一个进程赋以一个needtime,并将所有进程按needtime从小到大的次序排成一个队列。
2) 取队头进程,并投入运行。
3) 采用相对固定时间片(Time_piece),进程每执行一次,进程占用的CPU时间加Time_piece。
4) 若进程没有运行完,进程needtime减Time,并排到就绪队列的尾部。
5) 如果尚有进程在队列中,那么转入2)
PCB结构:N 进程个数
name 进程名
Time_piece 进程优先数/进程轮转时间片
Cpu_time 进程占用的CPU时间
Need_time 进程到完成还要的时间
Count 计数器
State 进程状态(P,W,F)
Arrive_time到达时间
next 链指针
run 当前运行进程指针
start 就绪队列头指针
end 就绪队列尾指针
finish 完成队列头指针
void insert(PCB *p) //时间片插入函数
void create() //时间片算法创建进程函数
void roundrobin() //时间片算法函数
void firstin() //运行就绪队列的第一个进程

你可以到这个地址下载文章看一下。
"http://wenku.b***.com/view/f3bca1d333d4b14e85246830.html"

相关推荐

负载均衡的详细信息

算法提供多个WAN ports可作多种负载平衡算法则,企业可依需求自行设定负载平衡规则,而网络存取可参照所设定的规则,执行网络流量负载平衡导引。算法则有:◎ 依序Round Robin◎ 比重Weighted Round Robin◎ 流量比例Traffic◎ 使用者端User◎ 应用类别Application◎ 联机数量Session◎ 服务类别Service◎ 自动分配Auto ModeInbound Load Balancing内建Inbound Load Balance 功能,可让企业透过多条ISP线路,提供给浏览者更实时、快速与稳定不断线的因特网在线服务;Inbound负载平衡算法包括:Round Robin/ Weighted Round Robin/Auto Back Up;功能内建DNS服务器,可维护多个网域(domain),每个网域又可以新增多笔纪(A/CNAME/MX),达到Inbound Load Sharing的功能。■Server Load BalancingAboCom服务器负载均衡提供了服务级(端口)负载均衡及备援机制。主要用于合理分配企业对外服务器的访问请求,使得各服务器之间相互进行负载和备援。AboCom服务器负载与服务器群集差异:一旦有服务器故障,群集技术只对服务器的硬件是否正常工作进行检查;AboCom服务器负载则对应用服务端口进行检查,一旦服务器的该应用服务端口异常则自动将访问请求转移到正常的服务器进行响应。■VPN Trunk 负载均衡支持同时在多条线路上建立VPN连接,并对其多条VPN线路进行负载。不仅提高了企业总部与分支机构的VPN访问速度,也解决了因某条ISP线路断线造成无法访问的问题。进行VPN负载均衡时VPN访问数据将同时在多条VPN线路上进传输。当一条VPN线路故障时,所有流量将自动切换到正常的VPN线路上进行传输。QoS(带宽管理)个人带宽管理:可实现每个人的网络带宽分配、管理,可以设置保证带宽用以保障个人应用不受整体环境影响。每日带宽配额:可以针对个人、群组或部门等分别设置带宽配额,这样可以合理利用带宽资源,杜绝资源的浪费,也杜绝员工干与工作无关的事,如看在线电影,下载大容量文件资料等等。内容过滤网络信息过滤:采用关键字进行内容过滤,可保护内网不受色情、暴力、反动、迷信等信息的入侵和干扰。聊天软件、P2P软件控制:可针对QQ、MSN、YAHOO、SKYPE、GOOGLE TALK等聊天通讯软件进行管控和限制,还可限制或禁止如BT、电驴、迅雷等P2P软件的使用。SSL VPN提供最佳远程安全存取解决方案,企业仅需透过最熟悉的网络浏览器接口(Web Browser),即可轻松连接到企业内部网络;即使未携带企业管控的笔记型计算机,利用家用计算机、公用计算机、PDA等,甚至是通过无线局域网络,都不影响安全联机的建立。其他功能实时图形化统计分析:记录所有网络封包的进出流量信息,可用做网络使用监控及统计记录;提供事件警报 (Event Alert)及日志记录管理功能;支持3A认证:Authentication、Authorization、Accounting,即认证、授权、审计;交换机联合防御:利用指定交换机进行联合防护,提升整个网络的安全系数和安全强度;HA双机热备:支持双机备援,防止设备故障造成网络瘫痪,提升整个网络的可靠性;远程唤醒(Wake on Lan):远程启动计算机。 软/硬件软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。本地/全局负载均衡从其应用的地理结构上分为本地负载均衡(Local Load Balance)和全局负载均衡(Global Load Balance,也叫地域负载均衡),本地负载均衡是指对本地的服务器群做负载均衡,全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。本地负载均衡能有效地解决数据流量过大、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。其有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到服务群中,而不需改变现有网络结构、停止现有的服务。全局负载均衡主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度,也可用于子公司分散站点分布广的大公司通过Intranet(企业内部互联网)来达到资源统一合理分配的目的。全局负载均衡有以下的特点:实现地理位置无关性,能够远距离为用户提供完全的透明服务。除了能避免服务器、数据中心等的单点失效,也能避免由于ISP专线故障引起的单点失效。解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量。 负载均衡有三种部署方式:路由模式、桥接模式、服务直接返回模式。路由模式部署灵活,约60%的用户采用这种方式部署;桥接模式不改变现有的网络架构;服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络应用。约30%的用户采用这种模式。路由模式(推荐)路由模式的部署方式如上图。服务器的网关必须设置成负载均衡机的LAN口地址,且与WAN口分署不同的逻辑网络。因此所有返回的流量也都经过负载均衡。这种方式对网络的改动小,能均衡任何下行流量。桥接模式桥接模式配置简单,不改变现有网络。负载均衡的WAN口和LAN口分别连接上行设备和下行服务器。LAN口不需要配置IP(WAN口与LAN口是桥连接),所有的服务器与负载均衡均在同一逻辑网络中。参见下图:由于这种安装方式容错性差,网络架构缺乏弹性,对广播风暴及其他生成树协议循环相关联的错误敏感,因此一般不推荐这种安装架构。服务直接返回模式如上图,这种安装方式负载均衡的LAN口不使用,WAN口与服务器在同一个网络中,互联网的客户端访问负载均衡的虚IP(VIP),虚IP对应负载均衡机的WAN口,负载均衡根据策略将流量分发到服务器上,服务器直接响应客户端的请求。因此对于客户端而言,响应他的IP不是负载均衡机的虚IP(VIP),而是服务器自身的IP地址。也就是说返回的流量是不经过负载均衡的。因此这种方式适用大流量高带宽要求的服务。 基础网络配置:AX1000(config)#clock timezone Asia/Shanghai//设置时区AX1000(config)#vlan 10//创建VLAN10AX1000(config-vlan:10)# untagged ethernet 1 to 2//划分接口到VLAN10中AX1000(config-vlan:10)# router-interface ve 10 //设置路由接口为Ve10,后面会给Ve10 配置地址的,这点和传统的二、三层交换不一样。AX1000(config-vlan:10)# name “Web-Server-Outside”//也可以设置的备注AX1000(config-vlan:10)#end//完成VLAN10的内容,和Cisco的命令一样。AX1000(config)#vlan 20AX1000(config-vlan:20)# untagged ethernet 3 to 4AX1000(config-vlan:20)# router-interface ve 20AX1000(config-vlan:20)# name “Web-Server-Inside”AX1000(config-vlan:10)#endAX1000(config)#interface ethernet 1//进入eth1口AX1000(config-if:ethernet1)# enable //激活该接口AX1000(config-if:ethernet1)# interface ethernet 2AX1000(config-if:ethernet2)# enableAX1000(config-if:ethernet2)#interface ethernet 3AX1000(config-if:ethernet3)# enableAX1000(config-if:ethernet3)#interface ethernet 4AX1000(config-if:ethernet4)# enableAX1000(config-if:ethernet4)#endAX1000(config)#interface ve 10//进入Ve10接口并为其配置地址AX1000(config-if:ve10)# ip address 116.255.188.2 255.255.255.0AX1000(config-if:ve10)# ip nat outside//这和传统的路由交换设置一直,是需要做NAT处理的。AX1000(config-if:ve10)#endAX1000(config)#interface ve 20AX1000(config-if:ve20)# ip address 192.168.1.1 255.255.255.0AX1000(config-if:ve20)# ip nat insideAX1000(config-if:ve20)#end首先添加服务器:AX1000(config)#slbserver Web1192.168.1.11//添加服务器Web1,其IP地址为192.168.1.11AX1000(config-real server)#port 80tcp//指定服务器开放的端口及端口类型AX1000(config-real server-node port)#exitAX1000(config-real server)#exitAX1000(config)#slb server Web2192.168.1.12AX1000(config-real server)#port 80tcpAX1000(config-real server-node port)#end检查添加的服务器状态是否正常:AX1000#showslbserver //查看SLB信息Total Number of Services configured: 2Current = Current Connections, Total = Total ConnectionsFwd-pkt = Forward packets, Rev-pkt = Reverse packetsService Current Total Fwd-pkt Rev-pkt Peak-conn State—————————————————————————————Web1:80/tcp 0 0 0 0 0 UpWeb1: Total 0 0 0 0 0 UpWeb2:80/tcp 0 0 0 0 0 UpWeb2: Total 0 0 0 0 0 Up发现全Up以后,则表示服务器的健康检查通过。默认的健康检查方式是Ping检查服务器的存活状态。只有服务器状态为Up时,负载均衡器才会把会话分发给该服务器处理,从而最大可能性的保障用户的请求得到服务器的正常应答,这也是负载均衡器的基本功能之一。在很多时候服务器作了安全策略,比如说防止Icmp的报文等等,就需要调整服务器的健康检查方式,具体内容后期提供。创建服务组AX1000(config)#slb service-group WebtcpAX1000(config-slbsvc group)#member Web1:80AX1000(config-slbsvc group)#member Web2:80AX1000(config-slbsvc group)#end验证服务组工作正常AX1000#show slb service-groupTotal Number of Service Groups configured: 2Current = Current Connections, Total = Total ConnectionsFwd-p = Forward packets, Rev-p = Reverse packetsPeak-c = Peak connectionsService Group NameService Current Total Fwd-p Rev-p Peak-c——————————————————————————-*Web State:All UpWeb1:80 0 0 0 0 0Web2:80 0 0 0 0 0创建虚拟服务器:其地址为:116.255.188.235,即对外公布的真实的服务地址AX1000(config)#slbvirtual-server VIP-WEB 116.255.188.235//创建VIPAX1000(config-slbvserver)#port 80http//指定VIP对公共用户开放的端口及端口类型,Web页面选择httpAX1000(config-slbvserver-vport)#service-group Web//该端口对应的服务组为WebAX1000(config-slbvserver-vport)#end查看虚拟服务器状态AX1000#showslbvirtual-serverTotal Number of Virtual Services configured: 1Virtual Server Name IP Current Total Request Response PeakService-Group Service connection connection packets packets connection—————————————————————————————-*VIP-WEB(A) 116.255.188.235 Upport 80 http 0 0 0 0 0Web 80/http 0 0 0 0 0Total received conn attempts on this port: 0域名的解析记录已设置为116.255.188.235,所以只要直接访问即可看到效果。验证:AX1000#show session | in 116.255.188.235//查看当前设备上访问116.255.188.235的详细会话Traffic Type Total——————————————–TCP Established 17TCP Half Open 8UDP 0Non TCP/UDP IP sessions 0Other 681295Reverse NAT TCP 0Reverse NAT UDP 0Free Buff Count 0Curr Free Conn 2031387Conn Count 6926940Conn Freed 6926870TCP SYN Half Open 0Conn SMP Alloc 103137Conn SMP Free 102986Conn SMP Aged 0Conn Type 0 Available 6225920Conn Type 1 Available 3112960Conn Type 2 Available 2015155Conn Type 3 Available 778240Conn SMP Type 0 Available 6225920Conn SMP Type 1 Available 3112960Conn SMP Type 2 Available 1572712Conn SMP Type 3 Available 778240Prot Forward Source Forward Dest Reverse Source Reverse Dest Age Hash Flags—————————————————————————————————————-Tcp 110.152.232.139:1927 116.255.188.235:80 192.168.1.11:80 110.152.232.139:80 0 1 OSTcp 110.152.232.139:1927 116.255.188.235:80 192.168.1.12:80 110.152.232.139:80 0 1 OS类型 源地址 目的地址服务器地址 服务器回报地址
2023-08-01 19:19:361

06.Nacos Feign 负载均衡

Feign 是一个声明式的伪 HTTP 客户端,它使得写 HTTP 客户端变得更简单。使用 Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用 Feign 注解和 JAX-RS 注解。Feign 支持可插拔的编码器和解码器。Feign 默认集成了 Ribbon,Nacos 也很好的兼容了 Feign,默认实现了负载均衡的效果 在 hello-spring-cloud-alibaba-consumer 项目中增加 org.springframework.cloud:spring-cloud-starter-openfeign 依赖 通过 @EnableFeignClients 注解开启 Feign 功能 创建业务结构,通过 @FeignClient("服务名") 注解来指定调用哪个服务 通过浏览器访问 http://localhost:8080/feign/echo/hi 负载主机可以提供很多种负载均衡方法,也就是我们常说的调度方法或算法 Round Robin: 这种方法会将收到的请求循环分配到服务器集群中的每台机器,即有效服务器。如果使用这种方式,所有的标记进入虚拟服务的服务器应该有相近的资源容量 以及负载形同的应用程序。如果所有的服务器有相同或者相近的性能那么选择这种方式会使服务器负载形同。基于这个前提,轮循调度是一个简单而有效的分配请求 的方式。然而对于服务器不同的情况,选择这种方式就意味着能力比较弱的服务器也会在下一轮循环中接受轮循,即使这个服务器已经不能再处理当前这个请求了。 这可能导致能力较弱的服务器超载。 Weighted Round Robin: 这种算法解决了简单轮循调度算法的缺点:传入的请求按顺序被分配到集群中服务器,但是会考虑提前为每台服务器分配的权重。管理员只是简单的通过服务 器的处理能力来定义各台服务器的权重。例如,能力最强的服务器 A 给的权重是 100,同时能力最低的服务器给的权重是 50。这意味着在服务器 B 接收到第一个 请求之前前,服务器 A 会连续的接受到 2 个请求,以此类推。 Least Connection: 以上两种方法都没有考虑的是系统不能识别在给定的时间里保持了多少连接。因此可能发生,服务器 B 服务器收到的连接比服务器 A 少但是它已经超载,因为 服务器 B 上的用户打开连接持续的时间更长。这就是说连接数即服务器的负载是累加的。这种潜在的问题可以通过 “最少连接数” 算法来避免:传入的请求是根据每 台服务器当前所打开的连接数来分配的。即活跃连接数最少的服务器会自动接收下一个传入的请求。接本上和简单轮询的原则相同:所有拥有虚拟服务的服务器资源 容量应该相近。值得注意的是,在流量率低的配置环境中,各服务器的流量并不是相同的,会优先考虑第一台服务器。这是因为,如果所有的服务器是相同的,那么 第一个服务器优先,直到第一台服务器有连续的活跃流量,否则总是会优先选择第一台服务器。 Source IP Hash: 这种方式通过生成请求源 IP 的哈希值,并通过这个哈希值来找到正确的真实服务器。这意味着对于同一主机来说他对应的服务器总是相同。使用这种方式,你不需要保存任何源 IP。但是需要注意,这种方式可能导致服务器负载不平衡。 Least Connection Slow Start Time: 对最少连接数和带权重的最小连接数调度方法来说,当一个服务器刚加入线上环境是,可以为其配置一个时间段,在这段时间内连接数是有限制的而且是缓慢 增加的。这为服务器提供了一个‘过渡时间"以保证这个服务器不会因为刚启动后因为分配的连接数过多而超载。这个值在 L7 配置界面设置。 Weighted Least Connection: 如果服务器的资源容量各不相同,那么 “加权最少连接” 方法更合适:由管理员根据服务器情况定制的权重所决定的活跃连接数一般提供了一种对服务器非常 平衡的利用,因为他它借鉴了最少连接和权重两者的优势。通常,这是一个非常公平的分配方式,因为它使用了连接数和服务器权重比例;集群中比例最低的服务器 自动接收下一个请求。但是请注意,在低流量情况中使用这种方法时,请参考 “最小连接数” 方法中的注意事项。 Agent Based Adaptive Balancing: 除了上述方法之外,负载主机包含一个自适用逻辑用来定时监测服务器状态和该服务器的权重。对于非常强大的 “基于代理的自适应负载均衡” 方法来说,负 载主机以这种方式来定时检测所有服务器负载情况:每台服务器都必须提供一个包含文件,这个文件包含一个 0~99 的数字用来标明改服务器的实际负载情况 (0 = 空前,99 = 超载,101 = 失败,102 = 管理员禁用),而服务器同构 http get 方法来获取这个文件;同时对集群中服务器来说,以二进制文件形式提供自身负载情况也是该服务器工作之一,然而,并没有限制服务器如何计算自身的负载 情况。根据服务器整体负载情况,有两种策略可以选择:在常规的操作中,调度算法通过收集的服务器负载值和分配给该服务器的连接数的比例计算出一个权重比 例。因此,如果一个服务器负载过大,权重会通过系统透明的作重新调整。和加权轮循调度方法一样,不正确的分配可以被记录下来使得可以有效的为不同服务器分 配不同的权重。然而,在流量非常低的环境下,服务器报上来的负载值将不能建立一个有代表性的样本;那么基于这些值来分配负载的话将导致失控以及指令震荡。 因此,在这种情况下更合理的做法是基于静态的权重比来计算负载分配。当所有服务器的负载低于管理员定义的下限时,负载主机就会自动切换为加权轮循方式来分 配请求;如果负载大于管理员定义的下限,那么负载主机又会切换回自适应方式。 Fixed Weighted: 最高权重只有在其他服务器的权重值都很低时才使用。然而,如果最高权重的服务器下降,则下一个最高优先级的服务器将为客户端服务。这种方式中每个真实服务器的权重需要基于服务器优先级来配置。 Weighted Response: 流量的调度是通过加权轮循方式。加权轮循中所使用的权重是根据服务器有效性检测的响应时间来计算。每个有效性检测都会被计时,用来标记它响应成功花 了多长时间。但是需要注意的是,这种方式假定服务器心跳检测是基于机器的快慢,但是这种假设也许不总是能够成立。所有服务器在虚拟服务上的响应时间的总和 加在一起,通过这个值来计算单个服务物理服务器的权重;这个权重值大约每 15 秒计算一次。
2023-08-01 19:20:081

C++在函数定义的时候在后面加上=delete是什么意思例如:RoundRobin(const RoundRobin& rhs) = delete;

即将该函数定义成已删除的函数,任何试图调用它的行为将产生编译期错误。是C++11标准的内容。
2023-08-01 19:20:181

Kafka数据消费

消费者负责从订阅的主题上拉取消息,消费组是逻辑概念。一个消费者只属于一个消费组,一个消费组包一个或多个消费者。当消息发布到主题后,会被投递到每个消费组,但每个消费组中只有一个消费者能消费给消息。 消费者如何知道该消费哪个分区?当消费组内消费者个数发生变化时,分区分配是如何变化的呢? 按照消费者总数和分区总数进行整除运算来获得一个跨度,然后将分区按照跨度进行平均分配, 以保证分区尽可能均匀地分配给所有的消费者。对于 每一个主题 该策略会将消费组内所有的消费者按照名称的字典序排序然后为每个消费者划分固定的分区范围,如果不够平均分配,那么字典序靠前的消费者会被多分配一个分区。 假设n=分区数/消费者数量,m=分区数%消费者数量,那么前m个消费者每个分配n+1分区,后面的每个消费者分配n个分区。 如图所示主题中共有7个分区,此时消费组内只有一个消费者C0,C0订阅7个分区。 随着消费组内消费者不断加入,分区逐渐从C0分配到C1~C6,当最后一个消费者C7加入后,此时总共有8个消费者但是只有7个分区,因此C7由于分配不到分区而无法消费任何消息。 消费者并非越多越好,消费者数量应小于等于分区数量,否则会造成资源的浪费 缺点: 当一个消费组订阅两个分别包含四个分区的主题时,分区分配结果如下,比较均匀。 但当两个主题各有3个分区时,则会出现如下分区不均的问题。类似情况扩大的话,可能出现消费者过载问题。 将消费组内所有消费者及消费者订阅的所有主题的分区按照字典序排序,然后通过轮询方式将分区依次分配给每个消费者。如果消费组内消费者的订阅信息都是相同的,那么分区分配会比较均匀。如一个消费组两个消费者,分别订阅两个都有3的分区的主题,如图。 但是当消费组内消费者的订阅信息不同时,则会出现分配不均问题。如图,假设消费组内有三个消费者,主题1/2/3分别有1/2/3个分区,C0订阅主题1,C1订阅主题1和2,C2订阅主题1/2/3,分区结果将会如下图所示。 后来引入的策略,主要目的: 假设三个消费者,订阅了4个主题,每个主题有两个分区,那么初始分区分配结果如下: 乍一看,跟RoundRobin分配策略结果相同,但此时如果C1下线,那么消费组会执行再均衡操作,重新分配消息分区。如果是RoundRobin策略,分配结果如下: 而如果是Sticky分配策略,则结果如下: StickyAssignor保留了上一次对C0和C2的分配结果,将C1的分区分配给C0和C2使其均衡。 如果发生分区重分配,那么对于同一个分区而 ,有可能之前的消费者和新指派的消费者不是同一个,之前消费者进行到一半的处理还要在新指派的消费者中再次复现一遍,造成重复消费。StickyAssignor分配策略如同其名称中的"sticky"一 样,让分配策略具备的“黏性”,尽可能地让前后两次分配相同,进而减少系统资源的损耗及其他异常情况的发生。 再来看下,消费者订阅信息不相同的情况,拿RoundRobinAssignor中的实例来说。 假设消费组内有三个消费者,主题1/2/3分别有1/2/3个分区,C0订阅主题1,C1订阅主题1和2,C2订阅主题1/2/3,RoundRobinAssignor分区结果将会如下图所示。 而采用StickyAssignor时,分区分配结果如下: 若此时C0下线,RoundRobinAssignor重分配的结果如下: 而StickyAssignor重分配结果如下: 综上: StickyAssignor分配策略的优点就是可以使分区重分配具备 “黏性”,减少不必要的分区移动(一个分区剥离之前的消费者 ,转而分配给另一个新的消费者)。 Kafka中的消息消费是基于拉模式。 Kafka每次拉取一组消息,每条消息的格式如下: 在每次拉取方法时,它返回的是还没有被消费过的消息集。要实现这个功能,就需要知道上次消费时的消费位移,消费者在消费完消息后要进行消费位移提交动作,且消费位移要进行持久化,消费位移保存在__consumer_offsets主题中。 当前拉取消息的最大offset为x,消费者消费完成提交位移的是offset其实为x+1,表示下次拉取消息的起始位置。 自动提交 默认采用自动提交,默认每隔5s会将拉取到的每个分区的最大的消息位移进行提交。真正的提交动作是在拉取消息的逻辑完成,每次拉取消息前会判断是否可以进行位移提交,如果可以则提交上一次的位移。这里会有两个问题,如下图所示。 重复消费:当前拉取消息【x+2,x+7】,当前消费到X+5,在提交消费位移前,消费者宕机;新的消费者还是会从X+2开始拉取消息, 因此导致重复消费。 消息丢失:当前拉取消息【x+2,x+7】,当前消费X+5,到下次拉取的时候,消费位移已经提交为X+8,若此时消费者宕机,新的消费者会从X+8处开始消费,导致X+5 ~ X+7的消息没有被消费,导致消息的丢失。 手动提交 同步提交和异步提交。 同步提交默认提交本次拉取分区消息的最大偏移量,如本次拉取【X+2,X+7】的消息,同步提交默认提交X+8的位置;当时同步提交也可指定提交的偏移量,比如消费一条提交1次,因为提交本身为同步操作,所以会耗费一定的性能。 同步提交也会导致重复消费的问题,如消费完成后,提交前消费者宕机。 异步提交消费者线程不会被阻塞,使性能得到增强,但异步提交失败重试可能会导致提交位移被覆盖的问题,如本次异步提交offset=X失败,下次异步提交offset=X+y成功;此时前一次提交重试再次提交offset=x,如果业务上没有重试校验,会导致offset被覆盖,最终导致重复消费。 当新的消费组建立、消费者订阅新的主题或之前提交的位移信息因为过期被删除等,此时查不到纪录的消费位移。Kafka可配置从最新或从最早处开始消费。 Kafka还支持从特定位移处开始消费,可以实现回溯消费,Kafka内部提供了Seek()方法,来重置消费位移。 当需要回溯指定时间后的消息时,可先用offsetsForTimes方法查到指定时间后第一条消息的位移,然后再用seek重置位移。 分区的所属权从一个消费者转移到另一消费者的行为,它为消费组具备高可用性和伸缩性提供保障,使我们可以既方便又安全地删除或添加消费者。 Kfaka提供了组协调器(GroupCoordinator)和消费者协调器(ConsumerCoordinator),前者负责管理消费组,后者负责与前者交互,两者最重要的职责就是负责再均衡的操作。 举例说明,当消费者加入消费组时,消费者、消费组和组协调器之间一般会经历以下几个阶段。 第一阶段(FIND COORDINATOR) 消费者需要确定它所属的消费组对应的GroupCoordinator所在的broker并创建与该broker 相互通信的网络连接。 消费者会向集群中的某个节点发送FindCoordinatorRequest请求来查找对应的组协调器。 Kafka根据请求中的coordinator_key(也就是groupld )的哈希值计算__consumer_offsets中的分区编号,如下图所示。找到对应的分区之后,在寻找此分区leader副本所在的broker节点,该节点即为当前消费组所在的组协调器节点。 消费组最终的分区分配方案及组内消费者所提交的消费位移信息都会发送给该broker节点。该broker节点既扮演GroupCoordinato的角色又扮演保存分区分配方案和组内消费者位移的角色,这样可以省去很多不必要的中间轮转所带来的开销。 第二阶段(JOIN GROUP) 在成功找到消费组所对应的GroupCoordinator之后就进入加入消费组的阶段,在此阶段的 消费者会向GroupCoordinator发送JoinGroupRequest请求,并处理响应。 组协调器内部主要做了以下几件事: 选举消费组的****leader 如果当前组内没有leader,那么第一个加入消费组的则为leader。如果leader挂掉,组协调器会从内部维护的HashMap(消费者信息,key为member_id)中选择第一个key作为新的leader。 选举分区分配策略 前面说的每个消费者可能会上报多个分区分配策略,选举过程如下: 第三阶段(SYNC GROUP) leader消费者根据在第二阶段中得到的分区分配策略来实施分区分配,然后将分配结果同步到组协调器。各个消费者会向组协调器发送SyncGroupRequest请求来同步分配方案。 请求结构如图,leader发送的请求才会有group_assignment。 其中包含了各个消费者对应的具体分配方案,member_id表示消费者的唯一标识,而 member_assignment是与消费者对应的分配方案,如图 消费者收到具体的分区分配方案后,会开启心跳任务,定期向组协调器发送心跳请求确定彼此在线。 第四阶段(HEARTBEAT) 在正式消费之前,消费者还需要确定拉取消息的起始位置。假设之前已经将最后的消费位移提交成功,那么消费者会请求获取上次提交的消费位移并从此处继续消费。 心跳线程是一个独立的线程,可以在轮询消息的空档发送。如果消费者停发送心跳的时间足够长,组协调器会认为这个消费者已经死亡,则触发一次再均衡行为。
2023-08-01 19:20:261

spring boot loadbalancer 加载过程

open feign3.0开始就不支持Ribbon了 所以只能用loadbalancer spring-cloud-loadbalancer 官网文档 首先说明一下 spring cloud loadbalancer 是可以单独使用的 但通常我们会和consul等注册中心一起使用 这样我们就不用写死配置了(配置集群里面有哪些服务) 还有这个版本与OpenFeign 和 consul配合使用是不需要做任何配置的 并且spring-cloud-loadbalancer 是 spring-cloud-commons的一个子项目 spring.factories 功能: 首先在spring-cloud-commons包下也有个叫LoadBalancerAutoConfiguration的配置类,这个配置类会在它前面执行 功能: 请先读一下这篇文章: spring boot open feign 客户端调用过程 会知道OpenFeign发起请求前会调用BlockingLoadBalancerClient.choose选择一个服务端 上面也提到了BlockingLoadBalancerClient 它的加载过程。 接下来看看它的 实现 从 loadBalancerClientFactory 里取得服务列表 但我们提到了,我们并没有主动的创建服务器列表。 而是通过consul取得的,那么是什么时候取得的呢? 读一下: spring boot consul 客户端加载过程 我们能知道 consul是在web服务器启动完成后,才向注册中心发起注册的 也就是在这之前LoadBalancerClientFactory 一直是空的 所以是调用choose方法的时候才去拉取consul 上的服务器列表 所以我们看下:ReactiveLoadBalancer.choose 它是一个接口,看一下它有哪些实现 共两个实现: 1,RoundRobinLoadBalancer 2,RandomLoadBalancer 这里的ReactiveLoadBalancer实际上是RoundRobinLoadBalancer(默认的) 但我们在 spring-cloud-loadbalancer的spring.factories 并没有发现RoundRobinLoadBalancer的初始化 不过我们发现它是从 loadBalancerClientFactory里取出来的 继承自:NamedContextFactory:真正创建ReactiveLoadBalancer对象 实现了:ReactiveLoadBalancer.Factory。看名字就知道,它就是用来创建ReactiveLoadBalancer 的,但它是委托给了NamedContextFactory 来做的 看一下NamedContextFactory是怎么做的 可以看到 先getContext(name) 没有的化就createContext 然后就是这句 defaultConfigType是LoadBalancerClientConfiguration context将LoadBalancerClientConfiguration注册到上下文环境中 然后context.refresh(); LoadBalancerClientConfiguration的对象就创建出来了(spring.fatories里是没有它的) 可以看到 这里创建了 RoundRobinLoadBalancer 为什么要用NamedContextFactory这样创建 因为,道理很简单,spring-cloud-balancer要为每一个rpc客户端创建一个自己的上下文环境包含自己的配置 用服务名去取,这个serviceId在OpenFeign, Loadbalancer,Consul里是一致的 然后这里还创建了ServiceInstanceListSupplier 看这句,创建这个类的时候用到了DiscoveryClient,还把它们缓存了起来 这里context:ConfigurableApplicationContext包含ConsuDiscoveryClient 这里用到了BiFunciton,大家可以自己去查一下怎么用 DiscoveryClientServiceInstanceListSupplier 这里还用到了 Flux 大家可以自己去看 主要是这句 这里的delegate就是ConsulDiscoveryClient 然后就回到RoundRobinLoadBalancer 这个类其实很简单,就是取到服务器列表,然后一个简单的轮询
2023-08-01 19:20:561

SpringCloud组件之Ribbon深入

在上一节 SpringCloud组件之Ribbon 中,实现了一个Ribbon的Helloword,使用的是Spring Eureka 和Spring Ribbon结合使用,并且使用Ribbon的默认轮询注册清单的负载均衡策略。 Ribbon参数配置通常有两种方式:全局配置和知道客户端配置 通用格式:ribbon.<key>=<value> key:表示参数名称 value:表示参数值 例如:全局配置Ribbon创建连接的超时时间 针对指定的服务进行配置 通用格式 <client>.ribbon.<key>=<value> key:表示参数名称 value:表示参数值 client:表示客户端服务的名称 例如:我们调用的Rest请求时是 http://hello-service/hello/hello ,现在我们来为服务hello-service服务指定他的实例清单(和注册中心中的服务清单一样) 下面将单独使用Spring Ribbon组件来介绍几种Ribbon负载均衡策略,单独使用Ribbon组件,不结合Eureka组件的不同之处在于,不能根据服务名称自动从Eureka的注册中心获取一个服务的实例清单,必须手动在配置文件中添加服务实例清单。 RandomRule策略:该策略实现了从服务实例清单中 随机选择 一个服务实例,作为请求服务对象。 首先创建一个SpringBoot的服务。 pom.xml application.yaml LoadBalanceController类 LoadBalanceMain类 启动main,在浏览器中输入 http://localhost:8015/loadbalance/hello ,多次请求,可以看到页面呈现不同的请求路径。而且这些请求都是随机出现,查看后台打印 RoundRobinRule:该策略实现了按照 线性轮询 的方式一次轮询服务清单上的每个服务实例。 结合上面的例子,修改两个部分,一个是application.yaml中 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule 一个是LoadBalanceMain 中 修改ribbonRule()的返回值 RetryRule:该策略具备重试机制的实例选择功能,在给定时间内能够得到选择到具体的服务实例就返回,当超过时间还有没选到就返回null,参数maxRetryMillis控制这个超时时间。 WeightedResponseTimeRule:该策略是对RoundRobinRule的扩展,增加了根据实例的响应时间来计算权重,并从权重中选择对应的实例。该策略实现主要有三个核心内容 定时任务 WeightedResponseTimeRule策略在初始化的时候会启动一个定时任务,默认每隔30秒计算一次每个服务实例的权重 权重计算 累计所有实例的响应时间,得到总的totalResponseTime,然后为实例清单中的每个实例逐个计算权重,计算公式为 weightSoFar = weightSoFar + totalResponseTime - 该实例的平均响应时间 weightSoFar 起始为零 例子 有A,B,C,D四个实例,他们的平均响应时间是10,40,80,100, 计算总的响应时间10+40+80+100 =230 计算各个实例的权重 A: 230-10=220 B:220+(230-40)=410 C:410+(230-80)=560 D:560+(230-100)=690; 计算各个实例的权重区间 A:[0,220] B:(220,410] C:(410,560] D:(560,690) 实例选择 WeightedResponseTimeRule策略会在[0,最大权重值)之间随机选取一个数,然后在看这个数落在哪个实例的权重区间内,接着WeightedResponseTimeRule就会去选择该实例。 ClientConfigEnableRoundRobinRule:该策略一般不直接使用,有些高级的策略会继承该类,完成一些高级的策略,ClientConfigEnableRoundRobinRule策略默认使用 RoundRibinRule的线性轮询机制 BestAvailableRule策略继承ClientConfigEnableRoundRobinRule,通过遍历负载均衡中维护的所有服务实例,会过滤掉故障实例,并找出并发数请求数最小的实例,所以该策略的特性就是选出最空闲的实例 PredicateBasedRule策略继承ClientConfigEnableRoundRobinRule,该策略主要特性是“先过滤,在轮询”,也就是先过滤掉一些实例,得到过滤后的实例清单,然后轮询该实例清单,PredicateBasedRule中“过滤”功能没有实现,需要继承它的类完成,也就是说不同继承PredicateBasedRule的类有不同的“过滤特性” AvailabilityFilteringRule策略继承PredicateBasedRule策略的“先过滤,在轮询”特性, AvailabilityFilteringRule策略的过滤特性是 1:是否故障,即断路器是否生效已断开 2:实例的并发请求数大于阈值,默认2的32次方减一,该阈值可以通过 <clientName>.<nameSpace>.ActiveConnectionsLimit来设置,只要满足其中一个那么就会过滤掉
2023-08-01 19:21:041

F5的负载均衡

负载均衡是一种技术,指通过某种算法实现负载分担的方法。通俗的讲就是统一分配请求的设备,负载均衡会统一接收全部请求,然后按照设定好的算法将这些请求分配给这个负载均衡组中的所有成员,以此来实现请求(负载)的均衡分配。F5 BIG-IP LTM(本地流量管理器)是一台对流量和内容进行管理分配的设备。它提供12种灵活的算法将数据流有效地转发到它所连接的服务器群。而面对用户,只是一台虚拟服务器。用户此时只需访问定义于BIG-IP LTM上的一台服务器,即虚拟服务器(Virtual Server)。但他们的数据流却被BIG-IP灵活地均衡到所有的物理服务器。BIG-IP LTM可以通过多种负载均衡算法对流量进行分配,这些算法包括:轮询(RoundRobin)比率(Ratio)优先权(Priority)最少的连接方式(LeastConnection)最快模式(Fastest)观察模式(Observed)预测模式(Predictive)动态性能分配(DynamicRatio-APM)动态服务器补充(DynamicServerAct)服务质量(QoS)服务类型(ToS)规则模式 型号 吞吐量 配置 带机量 主要功能 F5Networks BIG-IP 1600 1Gbps 处理器:双CPU内存:4GB硬盘驱动器:160GB 4 降低服务器负载方面内容转换OneConnect高速缓存SSL加速和卸载应用优化方面智能应用交换智能压缩灵活的第7层速率整形TCPExpressiSessionsWAN优化模块(插件模块)安全的应用方面资源隐藏和内容安全定制的应用攻击过滤基础防火墙功能—数据包过滤隔离协议攻击网络攻击防护有选择的加密Cookie加密高级SSL加密标准先进的客户端验证模块(插件模块)垃圾邮件过滤模块(插件模块)协议安全模块(插件模块) F5Networks BIG-IP 3600 2Gbps 处理器:双CPU内存:4GB硬盘驱动器:160GB 8 F5Networks BIG-IP 3900 4Gbps 处理器:四核CPU内存:8GB硬盘驱动器:300GB 8 F5Networks BIG-IP 6900 6Gbps 处理器:双CPU,双核(4个处理器)内存:8GB硬盘驱动器:320GB *2 16 F5Networks BIG-IP 8900 12Gbps 处理器:双CPU,四核(8个处理器)内存:16GB硬盘驱动器:320GB *2 16
2023-08-01 19:21:151

行程安排 英文

1.scheduleforconferences(3days)1stday:arrangefreeactivitiesandsomesight-seeingtours2ndday:whole-dayconference(tomandlisa)3rdday:half-dayconference(jerry)returntoshanghai2.weagreethatwe"llconsiderthefollowing3placestobeourconferencesitexxxxxxxx3.accordingtoourbudget,weagreethatthechargesofthisconferencewillbearrangedasfollows:transportationfees:2800-3000residencecharges:diningcharges
2023-08-01 19:21:325

魔兽全部快捷键

看个人喜欢吧,我的是QEFRTGZXV,当然这些键原来的功能就没了,自己设定下就好了
2023-08-01 19:22:026

dubbo泛化调用 2.7.3版本升到2.7.6版本 泛化调用报null指针

报错如下; org.apache.dubbo.rpc.RpcException: Failfast invoke providers dubbo://10.170.112.91:20772/com.fosun.health.open.api.PaymentChannelConfigService?anyhost=true&application=xxl-job-provider&check=false&cluster=failfast&deprecated=false&dubbo=2.0.2&dynamic=true&generic=true&group=cashier&interface=com.fosun.health.open.api.PaymentChannelConfigService&lazy=false&loadbalance=roundrobin&methods=getPayTypesByChannelId&pid=18420&qos.enable=false&register.ip=10.170.112.91&release=2.7.6&remote.application=cashier-center-core&retries=0&revision=1.0.0&side=consumer&sticky=false&timestamp=1609236320490&version=1.0.0 RoundRobinLoadBalance select from all providers [org.apache.dubbo.registry.integration.RegistryDirectory$InvokerDelegate@6ad43d32] for service org.apache.dubbo.rpc.service.GenericService method $invoke on consumer 10.170.112.91 use dubbo version 2.7.3, but no luck to perform the invocation. Last error is: Failed to invoke remote method: $invoke, provider: dubbo://10.170.112.91:20772/com.fosun.health.open.api.PaymentChannelConfigService?anyhost=true&application=xxl-job-provider&check=false&cluster=failfast&deprecated=false&dubbo=2.0.2&dynamic=true&generic=true&group=cashier&interface=com.fosun.health.open.api.PaymentChannelConfigService&lazy=false&loadbalance=roundrobin&methods=getPayTypesByChannelId&pid=18420&qos.enable=false&register.ip=10.170.112.91&release=2.7.6&remote.application=cashier-center-core&retries=0&revision=1.0.0&side=consumer&sticky=false&timestamp=1609236320490&version=1.0.0, cause: org.apache.dubbo.remoting.RemotingException: java.lang.NullPointerException java.lang.NullPointerException at org.apache.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:74) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:81) at org.apache.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:81) at org.apache.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:41) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:81) at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:145) at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:100) at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:175) at org.apache.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:51) at org.apache.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:57) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) at org.apache.dubbo.rpc.cluster.support.FailfastClusterInvoker.doInvoke(FailfastClusterInvoker.java:59) at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:248) at org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:78) at org.apache.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:55) at org.apache.dubbo.common.bytecode.proxy138.$invoke(proxy138.java) at com.xxl.job.core.handler.impl.DubboJobHandler.execute(DubboJobHandler.java:73) at com.xxl.job.core.thread.JobThread.run(JobThread.java:163) 根据报错提示找到该出源码:是因为dubbo2.7.6版本 没有判断无参方法传null校验导致报空指针错误
2023-08-01 19:22:281

时间片轮转调度算法用C实现

#include "stdio.h"#include "stdlib.h"#include "string.h"typedef struct node{ char name[10]; /*进程标识符*/ int prio; /*进程优先数*/ int round; /*进程时间轮转时间片*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ int count; /*计数器*/ char state; /*进程的状态*/ struct node *next; /*链指针*/}PCB;PCB *finish,*ready,*tail,*run; /*队列指针*/int N; /*进程数*//*将就绪队列中的第一个进程投入运行*/firstin(){ run=ready; /*就绪队列头指针赋值给运行头指针*/ run->state="R"; /*进程状态变为运行态*/ ready=ready->next; /*就绪对列头指针后移到下一进程*/}/*标题输出函数*/void prt1(char a){ if(toupper(a)=="P") /*优先数法*/ printf(" name cputime needtime priority state "); else printf(" name cputime needtime count round state ");}/*进程PCB输出*/void prt2(char a,PCB *q){ if(toupper(a)=="P") /*优先数法的输出*/ printf(" %-10s%-10d%-10d%-10d %c ",q->name, q->cputime,q->needtime,q->prio,q->state); else/*轮转法的输出*/ printf(" %-10s%-10d%-10d%-10d%-10d %-c ",q->name, q->cputime,q->needtime,q->count,q->round,q->state);}/*输出函数*/void prt(char algo){ PCB *p; prt1(algo); /*输出标题*/ if(run!=NULL) /*如果运行指针不空*/ prt2(algo,run); /*输出当前正在运行的PCB*/ p=ready; /*输出就绪队列PCB*/ while(p!=NULL) { prt2(algo,p); p=p->next; } p=finish; /*输出完成队列的PCB*/ while(p!=NULL) { prt2(algo,p); p=p->next; } getch(); /*压任意键继续*/}/*优先数的插入算法*/insert1(PCB *q){ PCB *p1,*s,*r; int b; s=q; /*待插入的PCB指针*/ p1=ready; /*就绪队列头指针*/ r=p1; /*r做p1的前驱指针*/ b=1; while((p1!=NULL)&&b) /*根据优先数确定插入位置*/ if(p1->prio>=s->prio) { r=p1; p1=p1->next; } else b=0; if(r!=p1) /*如果条件成立说明插入在r与p1之间*/ { r->next=s; s->next=p1; } else { s->next=p1; /*否则插入在就绪队列的头*/ ready=s; }}/*轮转法插入函数*/insert2(PCB *p2){ tail->next=p2; /*将新的PCB插入在当前就绪队列的尾*/ tail=p2; p2->next=NULL;}/*优先数创建初始PCB信息*/void create1(char alg){ PCB *p; int i,time; char na[10]; ready=NULL; /*就绪队列头指针*/ finish=NULL; /*完成队列头指针*/ run=NULL; /*运行队列指针*/ printf("Enter name and time of process "); /*输入进程标识和所需时间创建PCB*/ for(i=1;i<=N;i++) { p=malloc(sizeof(PCB)); scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->cputime=0; p->needtime=time; p->state="w"; p->prio=50-time; if(ready!=NULL) /*就绪队列不空调用插入函数插入*/ insert1(p); else { p->next=ready; /*创建就绪队列的第一个PCB*/ ready=p; } } clrscr(); printf(" output of priority: "); printf("************************************************ "); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state="R";}/*轮转法创建进程PCB*/void create2(char alg){ PCB *p; int i,time; char na[10]; ready=NULL; finish=NULL; run=NULL; printf("Enter name and time of round process "); for(i=1;i<=N;i++) { p=malloc(sizeof(PCB)); scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->cputime=0; p->needtime=time; p->count=0; /*计数器*/ p->state="w"; p->round=2; /*时间片*/ if(ready!=NULL) insert2(p); else { p->next=ready; ready=p; tail=p; } } clrscr(); printf(" output of round "); printf("************************************************ "); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state="R";}/*优先数调度算法*/priority(char alg){ while(run!=NULL) /*当运行队列不空时,有进程正在运行*/ { run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->prio=run->prio-3; /*每运行一次优先数降低3个单位*/ if(run->needtime==0) /*如所需时间为0将其插入完成队列*/ { run->next=finish; finish=run; run->state="F"; /*置状态为完成态*/ run=NULL; /*运行队列头指针为空*/ if(ready!=NULL) /*如就绪队列不空*/ firstin(); /*将就绪对列的第一个进程投入运行*/ } else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/ if((ready!=NULL)&&(run->prio<ready->prio)) { run->state="W"; insert1(run); firstin(); /*将就绪队列的第一个进程投入运行*/ } prt(alg); /*输出进程PCB信息*/ }}/*时间片轮转法*/roundrun(char alg){ while(run!=NULL) { run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->count=run->count+1; if(run->needtime==0)/*运行完将其变为完成态,插入完成队列*/ { run->next=finish; finish=run; run->state="F"; run=NULL; if(ready!=NULL) firstin(); /*就绪对列不空,将第一个进程投入运行*/ } else if(run->count==run->round) /*如果时间片到*/ { run->count=0; /*计数器置0*/ if(ready!=NULL) /*如就绪队列不空*/ { run->state="W"; /*将进程插入到就绪队列中等待轮转*/ insert2(run); firstin(); /*将就绪对列的第一个进程投入运行*/ } } prt(alg); /*输出进程信息*/ }}/*主函数*/main(){ char algo; /*算法标记*/ clrscr(); printf("type the algorithm:P/R(priority/roundrobin) "); scanf("%c",&algo); /*输入字符确定算法*/ printf("Enter process number "); scanf("%d",&N); /*输入进程数*/ if(algo=="P"||algo=="p") { create1(algo); /*优先数法*/ priority(algo); } else if(algo=="R"||algo=="r") { create2(algo); /*轮转法*/ roundrun(algo); }}
2023-08-01 19:23:511

Spring Integration Channel

channel首先起到作用就是作为一个传输Message的管道。 在Spring Integration 中,实现了各种各样的channel,各自给管道赋予了不同的特性,满足不同的使用需求。(1) MessageChannel MessageChannel 是Spring Integration消息通道的顶级接口: 在该接口中,没有提供从channel中接收消息的方法,这个是因为spring integration的channel有两个不同的机制来处理接收消息,polling 、subscription,分别有两个子接口来表示。 (2) PollableChannel PollableChannel 具备轮询获得消息的能力,这种channel要求消息消费者或者框架去周期性的检查是否有可用的消息到达(3) SubscribableChannel SubscribableChannel 发送消息给订阅了MessageHanlder的订阅者在Spring integration中,默认的channel是SubscribanleChannels,默认的传输方式是同步的 (1)DirectChannel,Spring Integration默认的消息通道,它允许将消息发送给为一个订阅者,然后阻碍发送直到消息被接收 默认的Channel,传输方式都是同步的方式,下例中的三个service-activator都是同步调用的,都是由一个线程来运行的(2)QueueChannel,允许消息接收者轮询获得消息,用一个队列(queue)接收消息,队列的容量大小可配置在默认的channel中,三个动作同步的方式顺序执行,需要等待一起完成。有时候为了更快的返回结果,可以将部分动作另起线程处理。如上例中emailConfirme的动作可以延后异步执行,此时可以用QueueChannel来实现。 (3)PublishSubscribeChannel,允许广播消息给所有订阅者 在上例中,如果需要将“订购”的消息通知多个处理单元,不光发给“结账”模块。这时候我们就需要一个PublishSubscribeChannel,但由于PublishSubscribeChannel不支持缓存(queue),我们创建一个PublishSubscribeChannel来实现发布功能,再使用一个bridge连接原来的queueChannel,将消息发布出去(4)PriorityChannel,可按照优先级将数据存储到队列。在业务场景中,有时候需要按照优先级来将通道中的数据进行排序,这个时候我们需要PriorityChannel基本上是从以下几点考虑的 sharing context,是否共享上下文 Atomic boundaries,原子性 Buffering messages,是否缓存消息 Blocking and nonblocking operations,当大数据量的时候,选择什么策略处理消息 Consumption mode,消息的消费模式,点对点还是发布-订阅模式? 当一个channel被多个消费者订阅,而一个消息过来时,消费者如何分配这个消息,此时就涉及消息如何分发的策略了。Spring Integration提供了两个dispatcher的实现: UnicastingDispatcher:消息只发送给其中一个消费者 BoradcastingDispatcher:消息广播给全部的消费者 UnicastingDispatcher将消息分发给一个消费者,这里涉及了一个分发策略,这里引入了一个LoadBlancingStartegy,来确定消费者目前这个接口的唯一实现是RoundRobinLoadBalancingStrategy,顺次循环获取消费者 Spring Integration提供了一个便利:当消息发送到channel或者从channel获取的时间点,我们可以获得一个切入点,来对当前的发送或者获取动作执行操作举个书中的例子我们定义了一个bean (auditInterceptor),该bean的实现类实现了preSend方法,在channel的配置中使用<interceptors>引入使用该bean。当消息要发送到chargedBookings时,这个bean就可以先获得这个消息做一些操作。 另一个例子,spring Integration自己实现的,应对监控场景wire-tap节点引入一个interceptor,它也实现了presend方法,会将发送过来的消息也给发送到momitoringChannel中 再一个例子这个例子实现了只有“ChargedBooking”类型的Message才被接收。定义了一个拦截器,这个拦截器需要实现presend方法,在方法中判断消息的类型是否是“ChargedBooking”,这个连接器使用内定义的MessageSelectingInterceptor来实现,由于需要判断类型是否正确,在初始化这个MessageSelectingInterceptor时,给他设置了一个selector(PayloadTypeSelector)来实现目的。 MessageSelectingInterceptor-》PayloadTypeSelector-》具体类型,
2023-08-01 19:24:101

魔兽世界 求几个 战士宏

一楼...
2023-08-01 19:24:194

如何在ubuntu14.0下为WordPress应用服务器搭建四层负载均衡

在本教程中,我们将教你如何使用HAProxy为你的WordPress服务器搭建第四层负载均衡--特别是web应用层。负载均衡web服务器要在设置中增加冗余,这会在碰到服务器失败、网络问题时增加服务的可靠性;同时将负载分摊在多个服务器上可以提交读操作的性能。我们假设你所配置中包括一个WordPress应用服务器去连接一台单独的MySQL数据库服务器(假设你已经知道如何架设)。如果你只是运行了一个单独的web服务器应用程序,那么第四层负载均衡就比较适用。如果你的环境更复杂(例如你想通过一个单一的入口在不同的服务器上运行WordPress和一个静态web服务器),那么就可能就需要关注应用层(第七层)负载均衡。本文是以WordPress为例子,但是它的一般概念可以用于负载平衡,无状态的web应用。预备知识在继续本教程之前,你需要首先要完成架设一个拥有单独数据库服务器的WordPress站点的教程(或者使用类似的步骤):如何使用MYSQL建立一个远程数据库来优化站点性能。当你跟着教程在单独Web应用和数据库服务器下搭建完WordPress后,你应该有两个VPS。因为我们要处理几个VPS,为了参考,我们就成这两个VPS为:wordpress-1:你的WrodPress web应用服务器mysql-1:你的Mysql服务器现在你的环境的抽象视角看起来像下图这个样子:除了你当前的环境外,我们在本教程中还需要有两个额外的VPS。我们称他们为:wordpress-2:第二个WordPress web应用服务器haproxy-www:HAProxy服务器,做负载均衡用如果你对负载均衡的基本概念或者数据还不熟悉,比如四层负载均衡或者后端或者ACL,这里有篇文章解释这些基本概念:HAProxy及负载均衡概念介绍(译注:大家可百度查找)。我们的目标最终,我们想拥有以下一个环境:也就是说,你的用户将通过HAProxy服务器到达WordPress站点,其中HAProxy服务器会议轮循的方式将用户请求负载均衡至WrodPress应用服务器。你的两个WordPress应用服务器(或者更过,如果你愿意)将都会请求MYSQL数据库。当前环境快照可选:在继续本教程之前,你可能想为你当前环境创建快照。本教程中快照有两个目的:如果发生错误可以回滚到可工作环境对原始服务器做一次性复制,而不需要再次安装和配置PHP以及Nginx注意:为环境创建快照需要短暂的关闭VPS为wordpress-1和mysql-1两个VPS做一个快照。现在有了快照以后,我们就可以准备好继续搭建环境中其他部分了。创建第二台web应用服务器现在我们需要创建第二个VPS来分担原始应用服务器的负载。有两种选择:从之前的快照wordpress-1中创建一个新的VPS从头开始重新创建一个VPS并且设置该VPS和wordpress-1有相同的软件和配置不论那种方法,如果网络可用,一定要确保勾选个人网络。个人网络是本教程中所有VPS都需要的。如果没有个人网络选项,用你的VPS的公开IP来替代内网IP。需要注意的是,当使用公网IP在应用服务器和数据库服务器之间传输敏感数据比如非加密的数据库密码,并不是一个很好的选择,因为这些信息需要在互联网上传输。方式一:使用快照创建新的VPS创建一个新的VPS,叫做wordpress-2,使用你为wordpress-1做的快照来做。如果你选择的这种方式,可以跳过“方式二”直接去看“同步web应用文件”小节。方式二:从头创建一个新的VPS这种方式和“方式一”可二选一。如果你想从头设置wordpress-2服务器,而不是使用wordpress-1的快照,那么你要确保安装的软件相同。如果你忘了如何安装和设置原始wordpress服务器,可以参考预备知识章节中如何设置web服务器小节。快速参考,这里是一个相关软件和配置文件的列表,需要你来安装或复制:软件方面:Mysql客户端NginxPHP安装完这些软件后,在你的wordpress-2服务器上运行一下命令:sudo apt-get updatesudo apt-get install mysql-clientsudo apt-get install nginx php5-fpm php5-mysql原始应用服务器上需要创建或编辑的配置文件:/etc/php5/fpm/php.ini /etc/php5/fpm/pool.d/www.conf /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com当你修改完配置文件后,不要忘了冲洗PHP和Nginx,可以使用一下命令:sudo service php5-fpm restartsudo service nginx restart在新服务器的安装和配置完成以后,我们需要同步wordpress应用文件。同步Web应用文件在应用程序可以进行负载均衡之前,我们需要确保新应用服务器的应用程序文件和原始wordpress服务器的文件是同步的。这些文件的位置也就是你安装wordpress的位置,以及其他的一些文件。除了wordpress运行所需要的配置文件之外,上传的文件和通过wordpress接口安装的插件的安装文件和这些插件上传的文件都需要去同步。在预备知识文章中,我们将wordpress安装在/var/www/example.com路径下--我们将在所有的例子中都会使用这个路径,但是你需要将这个路径替换为你wordpress的实际安装路径。有很多方法在服务器之间同步文件--NFS或者glusterFS都是不错的选择。我们将使用glusterFS来满足我们所有的同步需求,因为它允许每个应用服务器来存储应用程序文件的副本,同时也会保持文件系统的一致性。下图是我们共享存储方案的概念图:如果你对本小节中使用的glusterFS完全不熟悉,请参考这个GlusterFS教程(https://www.digitalocean.com/community/tutorials/how-to-create-a-redundant-storage-pool-using-glusterfs-on-ubuntu-servers),这是本小节的基础。注意:下面的内容将经常在wordpress-1和wordpress-2服务器之间跳转,请确保在正确服务器上运行响应命令,否则你将遇到麻烦。编辑hosts文件如果你有一个内部DNS,而且这个DNS记录了你VPS的内部IP地址,那么你可以跳过这一步直接配置并执行glusterFS相关命令。否则,需要在wordpress-1和wordpress-2上编辑/etc/hosts文件:sudo vi /etc/hosts增加以下两行,将红色字替换为你应用服务器的各自ip:wordpress_1_private_IP wordpress-1wordpress_2_private_IP wordpress-2保存并退出。安装GlusterFS并配置一个冗余盘在wordpress-1和wordpress-2上使用apt-get命令安装glusterFS服务端软件:sudo apt-get install glusterfs-server在wordpress-1上,运行以下命令来和wordpress-2保持对等:sudo gluster peer probe wordpress-2在wordpress-2上,运行以下命令来和wordpress-1保持对等:sudo gluster peer probe wordpress-1在wordpress-1和wordpress-2上,创建路径用来存储glusterFS所管理的文件,运行:sudo mkdir /gluster-storage在wordpress-1上,创建glusterFS副本,我们称作volume1,glusterFS 会将它存放在/gluster-storage中的数据保存在你所有的应用服务器上,运行:sudo gluster volume create volume1 replica 2 transport tcp wordpress-1:/gluster-storage wordpress-2:/gluster-storage force预期输出以下结果:volume create: volume1: success: please start the volume to access data再次在wordpress-1上,运行一下命令来启动刚刚创建的glusterFS卷,在volume1上运行:sudo gluster volume start volume1预期输出以下结果:volume start: volume1: success在wordpress-1上,如果你想查看刚创建和启动的glusterFS卷的信息,运行:sudo gluster volume info你需要明白的是目前有两个glusterFS“同盟”,每个对应一个wordpress服务器。现在我们已经运行了一个glusterFS盘,为了能够使用它来同步文件,我们需要将该盘挂载。挂载共享存储首先挂载wordpress-1上的文件系统。在wordpress-1上,修改fstab文件来使共享文件系统可以随机启动:sudo vi /etc/fstab添加以下行到fstab来将/storage-pool目录作为挂载点:wordpress-1:/volume1/storage-pool glusterfs defaults,_netdev 0 0保存并退出。在wordpress-1上,现在将glusterFS盘挂载至/storage_pool文件系统:sudo mkdir /storage-poolsudo mount /storage-pool在wordpress-1上挂载共享盘/storage-pool后,你可以运行df -h命令来列出当前已挂载的文件。接下来,我们将使用类似的流程来挂载wordpress-2上的共享文件系统。在wordpress-2上,编辑fstab来使共享系统随机启动:sudo vi /etc/fstab添加以下行到fstab来将/storage-pool目录作为挂载点:wordpress-2:/volume1 /storage-pool glusterfs defaults,_netdev 0 0在wordpress-2上,现在将glusterFS盘挂载至/storage_pool文件系统:sudo mkdir /storage-poolsudo mount /storage-pool现在,所有在/storage-pool文件系统中创建、修改或删除的文件都会在两个wordpress服务器之间同步,即使当其中一个服务器暂时故障时也会同步。将wordpress文件移至共享存储下一步是将wordpress-1的wordpress文件移动到共享存储中。请将红色字体替换为你自己的值。/var/www/example.com表示wordpress文件的位置(nginx也会在这里查找文件),example.com本身只是根目录。在wordpress-1上,运行以下命令来移动wordpress文件至共享文件系统/storage-pool:sudo mv /var/www/example.com /storage-pool/sudo chown www-data:www-data /storage-pool/example.com接下来,你可能想创建一个符号链接来指向wordpress在共享文件中位置:sudo ln -s /storage-pool/example.com /var/www/example.com目前wordpress文件放在共享文件系统/storage-pool中,这些文件接受Nginx访问他们的原始路径/var/www/example.com。将新的应用服务器指向共享存储区下一步是我们在新web应用程序服务器上创建一个符号链接指向WordPress文件共享文件系统。如果你选择使用快照创建wordpress-2,在wordpress-2上运行以下命令:sudo rm /var/www/example.comsudo ln -s /storage-pool/example.com /var/www/example.com如果你从头创建wordpress-2服务器,在wordpress-2上运行以下命令:sudo mkdir -p /var/wwwsudo ln -s /storage-pool/example.com /var/www/example.com这就是wordpress应用的文件同步。接下来是使新服务器wordpress-2连接数据库。创建一个新的数据库用户由于Mysql使用用户名和源主机来区别用户,我们需要创建一个新的wordpress用户来连接新的服务器wordpress-2。在数据库服务器(mysql-1)上连接至MYSQL控制台:mysql -u root -p在一下mysql语句中,将红色字体替换为你真实环境的参数:wordpress用户:Mysql中wordpress用户。确保和已经存在的用户名保持一致。wordpress2private_IP:wordpress-2服务器的内部ip。密码:wordpress用户的Mysql数据库密码。去报和已经存在的用户名密码保持一致。在wordpress-2上mysql控制台中运行以下命令:CREATE USER "wordpressuser"@"wordpress_2_private_IP" IDENTIFIED BY "password";GRANT SELECT,DELETE,INSERT,UPDATE ONwordpress.* TO "wordpressuser"@"wordpress_2_private_IP";FLUSH PRIVILEGES;现在第二台服务器wordpress-2就可以登录mysql服务器mysql-1了。还没负载均衡 注意,有两个应用服务器在运行但是他们并没有被负载均衡,因为每个服务器必须通过他们的外网IP来访问。而我们希望能够通过相同的URL访问该应用程序,如http://example.com/,以及在两台服务器之间做流量分配。安装HAProxy在内网中创建一个新的VPS,在本教程中,我们叫做haproxy-www。在haproxy-www服务器上使用apt-get命令来安装HAProxy:sudo apt-get updatesudo apt-get install haproxy我们需要使用HAProxy初始化脚本来启动和停止HAProxy:sudo vi /etc/default/haproxy将ENABLED值改为1来开启初始化脚本:ENABLED=1保存并退出。现在HAProxy可以在服务器上被启动和停止。当然,你现在可以使用命令来控制HAProxy了。让我们来检查下它是否运行:/etc/init.d$ sudo service haproxy status输出结果:haproxy not runningHAProxy没有运行。这是对的,因为它首先需要配置。接下来,让我们来配置HAProxy。HAProxy配置HAProxy的配置文件主要分为以下两部分:Global:设置进程级参数Proxies:包括默认、监听、前端、后端参数Global配置所有的HAProxy配置都需要在HAProxy服务器haproxy-www上进行。首先,复制一份默认的haproxy.cfg文件:cd /etc/haproxy; sudo cp haproxy.cfg haproxy.cfg.orig现在,使用文本编辑器打开haproxy.cfg文件:sudo vi /etc/haproxy/haproxy.cfg你将看到有两部分已经被定义:global和defaults。首先,我们将对一些默认参数做一些修改。在默认情况下,找到一下两行:mode httpoption httplog将其中http替换为tcp,结果如下:mode tcpoption tcplog选择tcp作为HAProxy执行第4层负载平衡模式配置。在我们的例子中,这意味着一个特定的IP地址和端口中所有传入的流量将被转发到同一后端。如果你不熟悉这一概念,请阅读在HAProxy介绍中的负载均衡小节。先不要关闭配置文件,我们将加上proxy配置。代理配置(Proxyies)我们首先要做的事情是增加前端。对一个基本的4层负载均衡设置,前端监听一个特定的IP地址和端口的流量,并将传入流量转发到一个指定的后端。在配置文件的末尾,让我们添加上我们的前端:www。请将haproxy_www_public_IP替换为你自己的haproxy-www服务器IP地址:frontend wwwbind haproxy_www_public_IP:80default_backend wordpress-backend以下是对上面的前端配置代码片段中的每一行是什么意思做出解释:frontend www:指定了一个名为“www”的前端,我们将用它来处理传入www的流量bind haproxywwwpublic_IP:80:将haproxywwwpublic_IP替换为你haproxy-www服务器的外网ip。这是告诉haproxy这个前端将处理这个ip和端口上的流量。default_backend wordpress-backend:这指定所有这些前端的流量将会转发到wordpress-backend,这在下一步我们将定义配置完前端后,继续将以下后端配置加入文件末尾:backend wordpress-backendbalance roundrobinmode tcpserver wordpress-1 wordpress_1_private_IP:80 checkserver wordpress-2 wordpress_2_private_IP:80 check以下是对上面每行配置的解释:backend wordpress-backend:指定了一个名为“wordpress-backend”的后端balance roundrobin:指定该后端将使用“轮循”的负载均衡算法server wordpress-1 ...:指定了一个名为“wordpress-1”的后端服务器,内外nagIP(你必须替换为你自己服务器ip)和端口监听,在这个例子中为80端口。“check”选项表示使负载均衡器对这个服务器定期进行健康检查server wordpress-2 ...:指定了一个名为“wordpress-2”的后端保存并退出。现在HAProxy可以启动了,但是让我们先开启日志功能。开始HAProxy日志功能启用HAproxy日志功能非常简单,首先编辑rsyslog.conf文件:sudo vi /etc/rsyslog.conf接着找到一下两行,取消这两行注释来开启UDP日志功能:$ModLoad imudp$UDPServerRun 514$UDPServerAddress 127.0.0.1现在重启rsyslog来使新配置生效:sudo service rsyslog restartHAProxy日志功能现在已经开启了!日志文件将在HAProxy启动后被放在/var/log/haproxy.log。启动HAProxy和PHP/Nginx在haproxy-www服务器上,启动HAProxy来使配置生效:sudo service haproxy restart取决于你如何设置您的新应用程序服务器,您可能需要重新启动你的WordPress应用程序通过重启PHP和Nginx。在wordpress-2服务器上,重启PHP和Nginx:sudo service php5-fpm restartsudo service nginx restart现在WordPress应该运行在两个应用程序服务器,它们是负载均衡的。但仍有最后一个配置需要更改。更新WordPress配置现在你的WordPress应用程序的URL已经改变,我们必须在WordPress更新几个设置。在wordpress服务器,编辑你的wp-config.php文件。它位于WordPress的安装位置(在本教程中,它是安装在/var/www/example.com但你安装可能会有所不同):cd /var/www/example.com; sudo vi wp-config.php找到"DB_NAME"所在行;增加以下配置在该行之上,并且替换红色的值:define("WP_SITEURL", "http://haproxy_www_public_IP");define("WP_HOME", "http://haproxy_www_public_IP");保存并退出。现在WordPress url配置为指向您的负载平衡器,而不是只有最初的WordPress服务器,而且在当你试着访问wp-admin控制台时发挥作用。负载均衡完成您的web应用程序服务器现在是负载均衡的。你的负载平衡WordPress现在可以访问您的用户通过负载均衡器haproxy-www的外网IP地址或域名访问!总结现在您的用户将在两个wordpress服务器之间负载。另外,如果其中一个wordpress挂了,那么您的站点仍然是可用的,因为另一个wordpress服务器仍然在处理流量。使用此设置,记住你的HAProxy负载均衡服务器haproxy-www以及数据库服务器mysql-1,需要为你的网站运行正常而工作。1.本文由程序员学架构摘译2. 本文译自https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-as-a-layer-4-load-balancer-for-wordpress-application-servers-on-ubuntu-14-04
2023-08-01 19:24:281

汉译英段落翻译

试试金山词霸或者百度和google的翻译呀。
2023-08-01 19:24:534

如何使用Linux自带多路径DM

一、多路径解释多路径,顾名思义就是有多种选择的路径。在SAN或IPSAN环境,主机和存储之间外加了光纤交换机,这就导致主机和存储之间交换速度和效率增强,一条路径肯定是不行的,也是不安全不稳定的。多路径就是要来解决从主机到磁盘之间最快,最高效的问题。主要实现如下几个功能故障的切换和恢复IO流量的负载均衡磁盘的虚拟化多路径之前一直是存储厂商负责解决,竟来被拆分出来单独卖钱了。构架基本是这样的:存储,多路径软件,光纤交换机,主机,主机系统。 二、LINUX下的multipath1、查看是否自带安装?123456 [root@web2 multipath]# rpm -qa|grep devicedevice-mapper-1.02.39-1.el5device-mapper-1.02.39-1.el5device-mapper-multipath-0.4.7-34.el5device-mapper-event-1.02.39-1.el5[root@web2 multipath]#2、安装123456 rpm -ivh device-mapper-1.02.39-1.el5.rpm #安装映射包rpm -ivh device-mapper-multipath-0.4.7-34.el5.rpm #安装多路径包 外加加入开机启动chkconfig –level 2345 multipathd on #设置成开机自启动multipathdlsmod |grep dm_multipath #来检查安装是否正常3、配置1234567891011121314 # on the default devices.blacklist {devnode "^(ram|raw|loop|fd|md|dm-|sr|sr|scd|st)[0-9]*"devnode "^hd[a-z]"}devices {device {vendor "HP"path_grouping_policy multibusfeatures "1 queue_if_no_path"path_checker readsector()failback immediate}}<br><br>完整的配置如下:blacklist { devnode "^sda" } defaults { user_friendly_names no } multipaths { multipath { wwid 14945540000000000a67854c6270b4359c66c272e2f356321 alias iscsi-dm0 path_grouping_policy multibus path_checker tur path_selector "round-robin 0" } multipath { wwid 14945540000000000dcca2eda91d70b81edbcfce2357f99ee alias iscsi-dm1 path_grouping_policy multibus path_checker tur path_selector "round-robin 0" } multipath { wwid 1494554000000000020f763489c165561101813333957ed96 alias iscsi-dm2 path_grouping_policy multibus path_checker tur path_selector "round-robin 0" } multipath { wwid 14945540000000000919ca813020a195422ba3663e1f03cc3 alias iscsi-dm3 path_grouping_policy multibus path_checker tur path_selector "round-robin 0" } } devices { device { vendor "iSCSI-Enterprise" product "Virtual disk" path_grouping_policy multibus getuid_callout "/sbin/scsi_id -g -u -s /block/%n" path_checker readsector0 path_selector "round-robin 0" } }4、命令123456789101112131415161718192021222324252627282930 [root@web2 ~]# multipath -hmultipath-tools v0.4.7 (03/12, 2006)Usage: multipath [-v level] [-d] [-h|-l|-ll|-f|-F|-r] [-p failover|multibus|group_by_serial|group_by_prio] [device] -v level verbosity level 0 no output 1 print created devmap names only 2 default verbosity 3 print debug information -h print this usage text -b file bindings file location -d dry run, do not create or update devmaps -l show multipath topology (sysfs and DM info) -ll show multipath topology (maximum info) -f flush a multipath device map -F flush all multipath device maps -r force devmap reload -p policy force all maps to specified policy : failover 1 path per priority group multibus all paths in 1 priority group group_by_serial 1 priority group per serial group_by_prio 1 priority group per priority lvl group_by_node_name 1 priority group per target node device limit scope to the device"s multipath (udev-style $DEVNAME reference, eg /dev/sdb or major:minor or a device map name)[root@web2 ~]#5、启动关闭1234 # /etc/init.d/multipathd start #开启mulitipath服务service multipath startservice multipath restartservice multipath shutdown6、如何获取wwid1234567891011121314151617181920212223242526 1、[root@vxfs01 ~]# cat /var/lib/multipath/bindings# Multipath bindings, Version : 1.0# NOTE: this file is automatically maintained by the multipath program.# You should not need to edit this file in normal circumstances.## Format:# alias wwid#mpath0 36006016051d50e0035744871c912de11mpath1 36006016051d50e0034744871c912de11mpath2 36006016051d50e0032744871c912de11mpath3 36006016051d50e0039744871c912de11mpath4 36006016051d50e003a744871c912de11 2、[root@vxfs01 ~]# multipath -v3 |grep 3600sdb: uid = 36006016051d50e003a744871c912de11 (callout)sdc: uid = 36006016051d50e003a744871c912de11 (callout)sdd: uid = 36006016051d50e003a744871c912de11 (callout)sde: uid = 36006016051d50e003a744871c912de11 (callout)36006016051d50e003a744871c912de11 1:0:0:0 sdb 8:16 0 [undef][ready] DGC,RAI36006016051d50e003a744871c912de11 1:0:1:0 sdc 8:32 1 [undef][ready] DGC,RAI36006016051d50e003a744871c912de11 2:0:0:0 sdd 8:48 1 [undef][ready] DGC,RAI36006016051d50e003a744871c912de11 2:0:1:0 sde 8:64 0 [undef][ready] DGC,RAIFound matching wwid [36006016051d50e003a744871c912de11] in bindings file.比较详细的文字:http://zhumeng8337797.blog.163.com/blog/static/1007689142013416111534352/http://blog.csdn.net/wuweilong/article/details/14184097RHEL官网资料:http://www.prudentwoo.com/wp-content/uploads/downloads/2013/11/Red_Hat_Enterprise_Linux-5-DM_Multipath-en-US.pdfhttp://www.prudentwoo.com/wp-content/uploads/downloads/2013/11/Red_Hat_Enterprise_Linux-5-DM_Multipath-zh-CN.pdfhttp://www.prudentwoo.com/wp-content/uploads/downloads/2013/11/Red_Hat_Enterprise_Linux-6-DM_Multipath-en-US.pdfhttp://www.prudentwoo.com/wp-content/uploads/downloads/2013/11/Red_Hat_Enterprise_Linux-6-DM_Multipath-zh-CN.pdf
2023-08-01 19:25:021

思科路由中IGRP和EIGRP协议有什么不同?

EIGRP支持VLSM和不连续子网支持手动汇总EIGRP相比于IGRP有闪速更新,更快的收敛时间得特点EIGRP只对发生变化的条目更新,占用的网络资源更少希望可以帮到你
2023-08-01 19:25:103

centos 双网卡绑定 mode哪种好些

Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。首先要看linux是否支持bonding,RHEL4已经默认支持了。[root@localhost ~]# modinfo bondingfilename: /lib/modules/2.6.18-238.9.1.el5/kernel/drivers/net/bonding/bonding.koauthor: Thomas Davis, tadavis@lbl.gov and many othersdescription: Ethernet Channel Bonding Driver, v3.4.0-1version: 3.4.0-1license: GPLsrcversion: 358EAAF5610876F44387AEFdepends: ipv6vermagic: 2.6.18-238.9.1.el5 SMP mod_unload gcc-4.1………………………………如果有类似上面的信息输出,说明已经支持了。绑定步骤:1.修改/etc/sysconfig/network-scripts/ifcfg-eth0 配置文档修改后的内容如下:  DEVICE=eth0  ONBOOT=yes #系统启动时自动启用该设备  BOOTPROTO=none    #启动时不使用任何协议2.修改/etc/sysconfig/network-scripts/ifcfg-eth1 配置文档修改后的内容如下:  DEVICE=eth1  ONBOOT=yes #系统启动时自动启用该设备  BOOTPROTO=none    #启动时不使用任何协议3.创建一个绑定网络口的配置文档/etc/sysconfig/network-scripts/ifcfg-bond0内容如下:  DEVICE=bond0 #虚拟网卡名称  BOOTPROTO=static  IPADDR=192.168.0.2 #IP地址  NETMASK=255.255.255.0 #子网掩码  GATEWAY=192.168.0.1 #网关  BORADCAST=192.168.0.255 #广播地址  ONBOOT=yes  TYPE=Ethernet也可这样配置:(1)编辑虚拟网络接口配置文件(bond0),并指定网卡IPvi /etc/sysconfig/network-scripts/ifcfg-bond0DEVICE=bond0ONBOOT=yesBOOTPROTO=staticIPADDR=192.168.0.254BROADCAST=192.168.0.255NETMASK=255.255.255.0NETWORK=192.168.0.0GATEWAY=192.168.0.1USERCTL=noTYPE=Ethernet注意:建议不要指定MAC地址vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=noneONBOOT=yesUSERCTL=noMASTER=bond0SLAVE=yes注意:建议不要指定MAC地址vi /etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth1BOOTPROTO=noneONBOOT=yesUSERCTL=noMASTER=bond0SLAVE=yes注意:建议不要指定MAC地址这样配置完就不需要第5步了。4.修改/etc/modprobe.conf,配置绑定模型加入以下内容:  alias bond0 bonding  options bond0 millmon=100 mode=0 说明: miimon=100 miimon是指多久时间要检查网路一次,单位是ms(毫秒) 这边的100,是100ms,即是0.1秒 意思是假设其中有一条网路断线,会在0.1秒内自动备援 mode共有七种(0~6) mode=0:平衡负载模式,有自动备援,但需要"Switch"支援及设定。 mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。 mode=6:平衡负载模式,有自动备援,不必"Switch"支援及设定。需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond运行在mode 0下):mode 0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。所以mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为 ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解 决办法是,两个网卡接入不同的交换机即可。mode6模式下无需配置交换机,因为做bonding的这两块网卡是使用不同的MAC地址。PS:RHEL4 (centos4)及以下的版本options加在/etc/modprobe.conf中;RHEL5 (centos5)可以在ifcfg-bond0中加BONDING_OPTS="mode=1 arp_interval=100 arp_ip_target=192.168.0.1"5.修改/etc/rc.local,负责在系统启动时将虚拟网卡和两张物理网卡相绑定增加以下内容:  ifenslave bond0 eth0 eth1这样配置完成,重启机器,就可以看到有一张bond0的新网卡。可以查看bond0来得知当前状态:[root@localhost ~]# cat /proc/net/bonding/bond0Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)Bonding Mode: load balancing (round-robin)MII Status: upMII Polling Interval (ms): 100Up Delay (ms): 0Down Delay (ms): 0Slave Interface: eth0MII Status: upSpeed: 100 MbpsDuplex: fullLink Failure Count: 0Permanent HW addr: 00:24:XXXXXXXXSlave Interface: eth1MII Status: upSpeed: 100 MbpsDuplex: fullLink Failure Count: 1Permanent HW addr: 00:24:XXXXXXXX[ubuntu 10.04配置]apt-get install ifenslave-2.6vi /etc/network/interfacesauto bond0 iface bond0 inet static address 192.168.xx.xx gateway 192.168.x.x netmask 255.255.255.0 slaves eth1 eth2##slaves eth0 eth1 eth2 eth3 eth4 bond-mode 0 bond-miimon 100如果要绑定全部网卡, 用slaves all七种bond模式说明:第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1....一直循环下去,直到最后一个传输完毕), 此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降第二种模式:mod=1,即: (active-backup) Active-backup policy(主-备份策略)特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N第三种模式:mod=2,即:(balance-xor) XOR policy(平衡策略)特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力第四种模式:mod=3,即:broadcast(广播策略)特点:在每个slave接口上传输每个数据包,此模式提供了容错能力第五种模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。必要条件:条件1:ethtool支持获取每个slave的速率和双工设定条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式第六种模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。该模式的必要条件:ethtool支持获取每个slave的速率第七种模式:mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新(ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave加入到bond中时,或者某个未激活的slave重新激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答不会被switch(交换机)阻截。必要条件:条件1:ethtool支持获取每个slave的速率;条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,....ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量。
2023-08-01 19:25:302

与其他防火墙相比天融信的下一代防火墙有什么不同?

下一代防火墙作为当前网络安全领域讨论最热的产品,天融信下一代防火墙为什么好呢: NGFW○R系列产品基于天融信公司10年高品质安全产品开发经验结晶的NGTOS系统架构,采用了多项突破性技术。基于分层的设计思想,天融信公司通过长期的安全产品研发经验,分析多种安全硬件平台技术的差异,创造性地提出在硬件和操作系统内核层之间引入硬件抽象层。基于硬件抽象技术,使得NGTOS能适应各种硬件体系平台,并充分利用多种计算技术的优点。通过完善的系统结构设计,使NGTOS对比业界通常使用的其它系统具有如下特性:高效、可靠的基础系统NGTOS高效转发系统提供的多任务机制中对任务的控制采用了优先级抢占(Preemptive Priority Scheduling)和轮转调度(Round-Robin Scheduling)机制,充分保证了可靠的实时性,使同样的硬件配置能满足更强的实时性要求,为应用的开发留下更大的余地。同时,采用专为报文转发设计实现的系统,与通用操作系统相比,内容更精简,稳定性、可靠性更高。应用安全精细识别与控制NGTOS能够精确的识别12大类,超过400种当今互联网中常见和流行的网络协议,而这些协议的识别,并不是像传统防火墙中依赖端口号来简单的区分应用。天融信组建了一支专业的协议分析团队,密切的跟踪互联网应用协议的变化动态,及时的更新设备内置的应用协议特征库。在业界通用的单包特征匹配方法(DPI)之外,天融信还独创行为识别方法(DFI),通过的报文地址、端口、长度、数量,以及多个会话间的关联关系,来识别很多种特征并不明显或特征经常发生变化的协议,例如一些P2P应用和加密协议。内容安全策略完美整合由于传统防火墙基于五元组的访问控制机制无法应对各种复杂的网络应用,因此,NGTOS中的安全策略整合了用户身份、应用识别与控制、IPS、AV、URL过滤、垃圾邮件过滤、流量控制等等多种安全特性,从而构建了全方位立体化的安全防御体系。而这些安全已经实现单一引擎处理和联动,例如入侵防御功能侦测到的威胁可以自动加载到防火墙规则内,在网络层就能提前阻断。它们之间已经不仅仅再是互动关系,而是一个整体。高性能平台据测算,到2015年通过网络处理的数据量将比目前增长4倍,这对网络设备的性能提出了更高要求。天融信NGTOS基于先进的SmartAMP并行处理架构,内置处理器动态负载均衡专利技术,结合独创的SecDFA核心加速算法,保证了在NGFW○R产品中开启全特征和全部流量的情况下,整机的转发性能并不受明显的影响。与此同时,天融信通过此次与Intel的合作,利用Intel数据层高速处理技术将数据包处理解决方案快速迁移到最新的英特尔架构平台上,以获得最优性能。Intel数据层高速处理技术是一套用于高速网络的数据平面库,与Intel多核平台合而为一,可获得更高的数据包处理能力。通过将天融信NGTOS与Intel数据层高速处理技术进行有效整合,使天融信NGFW○R系列产品单安全引擎板网络吞吐性能达到40Gbps,而在天融信并行多级的硬件架构下通过部署多安全引擎将使NGFW○R旗舰机型整机吞吐达到320Gbps
2023-08-01 19:25:391

nginx 104 Connection reset by peer while reading upstream错误处理

1.看日志发现正常日志和错误日志比例几乎1:1 2.错误日志全部是104: Connection reset by peer) while reading upstream 3.看访问日志也没有其他http错误状态码 1.连续责任人咨询业务场景发现客户端请求基本上都是POST请求,开始以为是上传大文件连接超时了,后来开发确认为了安全使用POST请求,所以并没有大文件上传 2.由于upstream重置连接了,就是说后端主动断开了连接,然后发现连接里有很多TIME-WAIT,应该是qps比较大的情况下,连接处理比较快还在断开连接中就显得比较多了 3.nginx作为反向代理既然是客户端又是服务端,当和后端服务建立连接时并没有默认开启长连接,开启长连接后性能应该会提升很多 4.默认开启长连接不需要keeplive参数,如下是nginx官网查寻的keepalive参数,看的不是很明白,不过有个链接讲的很清楚,他可以激活连接缓存,应该属于长连接性能优化类 5.keepalive参数值应该与qps有关,默认不需要设置太大,如果访问日志里面有5XX错误还得根据实际情况调整,以达到最优效果 下面是官网keeplaive参数解释 Syntax: keepalive connections; Default: — Context: upstream This directive appeared in version 1.1.4. Activates the cache for connections to upstream servers. The connections parameter sets the maximum number of idle keepalive connections to upstream servers that are preserved in the cache of each worker process. When this number is exceeded, the least recently used connections are closed. It should be particularly noted that the keepalive directive does not limit the total number of connections to upstream servers that an nginx worker process can open. The connections parameter should be set to a number small enough to let upstream servers process new incoming connections as well. When using load balancing methods other than the default round-robin method, it is necessary to activate them before the keepalive directive. 1.修改nginx配置开启长连接及结合连接缓存 2.重启nginx服务 主要配置如下 1.查看错误日志 错误日志清空后没有增长过 2.查看连接数状态 长连接前TIME-WAIT比较多 长连接后TSTAB比较多 http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive https://www.cnblogs.com/sunsky303/p/10648861.html http://blog.51yip.com/apachenginx/2203.html
2023-08-01 19:25:471

一个处理器上可以有多个进程吗

晕。。当然可以! 现在的cpu可强着呢。 64位的最厉害。(目前) 当然,还得看你的进程占用资源率。。
2023-08-01 19:25:554

2013年全球大火的英文歌曲 不要你们认为好听的发给我 要全球大火的

《Blurred Lines》--Robin Thicke,火到爆,你可以去看看MV就知道了
2023-08-01 19:26:054

鱼大,FastDFS是如何确定文件在哪个storage server的?拜托各位了 3Q

服务器时间要保持一致。请检查一下 查看原帖>>
2023-08-01 19:26:271

调度算法详细资料大全

作业系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源。 基本介绍 中文名 :调度算法 所属领域 :作业系统 调度算法,评价因素,吞吐量,CPU利用率,周转时间,确定进程调度原则,调度算法分类,先来先服务(FCFS),轮转法(Round Robin),多级反馈伫列算法,linux进程调度算法, 调度算法 在作业系统中调度是指一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法;又如在分时系统中,为了保证系统具有合理的回响时间,应当采用轮转法进行调度。目前存在的多种调度算法中,有的算法适用于作业调度,有的算法适用于进程调度;但也有些调度算法既可以用于作业调度,也可以用于进程调度。 通常将作业或进程归入各种就绪或阻塞伫列。 调度算法要求:高资源利用率、高吞吐量、用户满意等原则。 进程调度所采用的算法是与整个系统的设计目标相一致的: 1.批处理系统:增加系统吞吐量和提高系统资源的利用率; 2.分时系统:保证每个分时用户能容忍的回响时间。 3.实时系统:保证对随机发生的外部事件做出实时回响。 评价因素 吞吐量 单位时间内CPU完成作业的数量。 CPU利用率 从0%~100%。 周转时间 评价批处理系统的性能指标。 Ti = 作业完成时刻 - 作业提交时刻 确定进程调度原则 在系统角度来说,公平性:每个进程(不论优先权)都有机会被运行;较大的吞吐量。 用户角度:及时性:回响速度要快;较短的周转时间:不应当让用户等待时间过长。 调度算法分类 先来先服务(FCFS) 先来先服务(FCFS, First Come First Serve)是最简单的调度算法,按先后顺序进行调度。 1. FCFS算法 按照作业提交或进程变为就绪状态的先后次序,分派CPU; 当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。 在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。最简单的算法。 2. FCFS的特点 比较有利于长作业,而不利于短作业。 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。 轮转法(Round Robin) 轮转法(Round Robin)是让每个进程在就绪伫列中的等待时间与享受服务的时间成正比例。 1. 轮转法 将系统中所有的就绪进程按照FCFS原则,排成一个伫列。 每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。 在一个时间片结束时,发生时钟中断。 调度程式据此暂停当前进程的执行,将其送到就绪伫列的末尾,并通过上下文切换执行当前的队首进程。? 进程可以未使用完一个时间片,就出让CPU(如阻塞)。 2. 时间片长度的确定 时间片长度变化的影响2 过长->退化为FCFS算法,进程在一个时间片内都执行完,回响时间长。2 过短->用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,回响时间长。 对回响时间的要求:T(回响时间)=N(进程数目)*q(时间片) 就绪进程的数目:数目越多,时间片越小 系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使回响时间,平均周转时间和平均带权周转时间延长。 多级反馈伫列算法 多级反馈伫列算法时间片轮转算法和优先权算法的综合和发展。优点:2 为提高系统吞吐量和缩短平均周转时间而照顾短进程。2 为获得较好的I/O设备利用率和缩短回响时间而照顾I/O型进程。2 不必估计进程的执行时间,动态调节。 1. 多级反馈伫列算法2 设定多个就绪伫列,分别赋予不同的优先权,如逐级降低,伫列1的优先权最高。每个伫列执行时间片的长度也不同,规定优先权越低则时间片越长,如逐级加倍。2 新进程进入记忆体后,先投入伫列1的末尾,按FCFS算法调度;若按伫列1一个时间片未能执行完,则降低投入到伫列2的末尾,同样按FCFS算法调度;如此下去,降低到最后的伫列,则按“时间片轮转”算法调度直到完成。2 仅当较高优先权的伫列为空,才调度较低优先权的伫列中的进程执行。如果进程执行时有新进程进入较高优先权的伫列,则抢先执行新进程,并把被抢先的进程投入原伫列的末尾。 2. 几点说明 I/O型进程:让其进入最高优先权伫列,以及时回响I/O互动。通常执行一个小时间片,要求可处理完一次I/O请求的数据,然后转入到阻塞伫列。 计算型进程:每次都执行完时间片,进入更低级伫列。最终采用最大时间片来执行,减少调度次数。 I/O次数不多,而主要是CPU处理的进程。在I/O完成后,放回优先I/O请求时离开的伫列,以免每次都回到最高优先权伫列后再逐次下降。2为适应一个进程在不同时间段的运行特点,I/O完成时,提高优先权;时间片用完时,降低优先权。 3.shortest job next 系统计算程式调用的时间,时间最短的先执行。 linux进程调度算法 linux核心的三种调度方法: 1. SCHED_OTHER 分时调度策略, 2. SCHED_FIFO实时调度策略,先到先服务 3. SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先权决定调度权值,分时进程则通过nice和counter值决 定权值,nice越小,counter越大,被调度的机率越大,也就是曾经使用了cpu最少的进程将会得到优先调 度。 SHCED_RR和SCHED_FIFO的不同: 当采用SHCED_RR策略的进程的时间片用完,系统将重新分配时间片,并置于就绪伫列尾。放在伫列 尾保证了所有具有相同优先权的RR任务的调度公平。 SCHED_FIFO一旦占用cpu则一直运行。一直运行直到有更高优先权任务到达或自己放弃。 如果有相同优先权的实时进程(根据优先权计算的调度权值是一样的)已经准备好,FIFO时必须等待该 进程主动放弃后才可以运行这个优先权相同的任务。而RR可以让每个任务都执行一段时间。 SHCED_RR和SCHED_FIFO的相同点: SHCED_RR和SHCED_FIFO都只用于实时任务。 创建时优先权大于0(1-99)。 按照可抢占优先权调度算法进行。 就绪态的实时任务立即抢占非实时任务。 所有任务都采用linux分时调度策略时。 1. 创建任务指定采用分时调度策略,并指定优先权nice值(-20~19)。 2. 将根据每个任务的nice值确定在cpu上的执行时间(counter)。 3. 如果没有等待资源,则将该任务加入到就绪伫列中。 4. 调度程式遍历就绪伫列中的任务,通过对每个任务动态优先权的计算(counter+20-nice)结果,选择 计算结果最大的一个去运行,当这 个时间片用完后(counter减至0)或者主动放弃cpu时,该任务将被放在 就绪伫列末尾(时间片用完)或等待伫列(因等待资源而放弃cpu)中。 5. 此时调度程式重复上面计算过程,转到第4步。 6. 当调度程式发现所有就绪任务计算所得的权值都为不大于0时,重复第2步。 所有任务都采用FIFO时: 1. 创建进程时指定采用FIFO,并设定实时优先权rt_priority(1-99)。 2. 如果没有等待资源,则将该任务加入到就绪伫列中。 3. 调度程式遍历就绪伫列,根据实时优先权计算调度权值(1000+rt_priority),选择权值最高的任务使用 cpu,该FIFO任务将一直占有cpu直到有优先权更高的任务就绪(即使优先权相同也不行)或者主动放弃(等 待资源)。 4. 调度程式发现有优先权更高的任务到达(高优先权任务可能被中断或定时器任务唤醒,再或被当前运行 的任务唤醒,等等),则调度程式立即在当前任务 堆叠中保存当前cpu暂存器的所有数据,重新从高优先权 任务的堆叠中载入暂存器数据到cpu,此时高优先权的任务开始运行。重复第3步。 5. 如果当前任务因等待资源而主动放弃cpu使用权,则该任务将从就绪伫列中删除,加入等待伫列,此时 重复第3步。 所有任务都采用RR调度策略时 1. 创建任务时指定调度参数为RR,并设定任务的实时优先权和nice值(nice值将会转换为该任务的时间片 的长度)。 2. 如果没有等待资源,则将该任务加入到就绪伫列中。 3. 调度程式遍历就绪伫列,根据实时优先权计算调度权值(1000+rt_priority),选择权值最高的任务使用 cpu。 4. 如果就绪伫列中的RR任务时间片为0,则会根据nice值设定该任务的时间片,同时将该任务放入就绪队 列的末尾。重复步骤3。 5. 当前任务由于等待资源而主动退出cpu,则其加入等待伫列中。重复步骤3。 系统中既有分时调度,又有时间片轮转调度和先进先出调度 1. RR调度和FIFO调度的进程属于实时进程,以分时调度的进程是非实时进程。 2. 当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。 3. RR进程和FIFO进程都采用实时优先权做为调度的权值标准,RR是FIFO的一个延伸。FIFO时,如果两 个进程的优先权一样,则这两个优先 级一样的进程具体执行哪一个是由其在伫列中的未知决定的,这样导 致一些不公正性(优先权是一样的,为什么要让你一直运行?),如果将两个优先权一样的任务 的调度策略都 设为RR,则保证了这两个任务可以循环执行,保证了公平。
2023-08-01 19:26:361

Kubernetes——Service(SVC)服务

SVC主要有以下两个作用:一、服务发现现在工作当中都将微服务项目部署到K8S上,因为每个项目都是很多个服务的集合,每个服务一般又都是由很多个pod组成的,那么当请求想要访问这个服务的时候如何将请求能够很好地找到这些POD并将请求分发给他们呢?即使是同一组服务他们的pod是在集群的不同位置的,Ip也就各不相同,SVC就可以有效地将同一组服务绑定在一起,也就是提供了一个统一的服务访问的入口,无论他们分发到哪个节点,也无论他们被分发了多少个不同的IP,SVC都可以做到将请求转发到这组服务的其中一个POD中进行处理,k8s在创建SVC时候,会根据标签选择器selector(Lable selector)来查找pod,据此创建与SVC同名的endpoint对象,当pod地址发生变化时,endpoint也会随之发生变化,SVC接收到前端client请求的时候,就会通过endpoint,找到要转发到哪个Pod进行访问网站的地址。二、负载均衡因为每个SVC都是通过Label绑定微服务当中其中一个服务的一组POD,当外部或者集群其他服务发来请求时,SVC会通过负载均衡,将请求分发到这一组POD当中的其中一个。
2023-08-01 19:27:052

教网球的英语短语

tennis racket 网球拍 tennis 网球
2023-08-01 19:27:153

大林寺桃花中包含着怎样的哲理?

哲理如下:“人间四月芳菲尽”是写诗人登山时已届孟夏,正属大地春归,芳菲落尽的时候了。诗人在登临之前,就曾为春光的匆匆不驻而遗憾,而恼怒,而失望。因此当这始所未料的一片春景冲入眼帘时,该是使人感到多么的惊异和欣喜。“芳菲尽”与第二句的“始盛开” 是在对比中遥相呼应的。它们字面上是纪事写景,实际上也是在写感情和思绪上的跳跃——由一种愁绪满怀的叹逝之情,突变到惊异、欣喜,以至心花怒放。作品简介与赏析《大林寺桃花》是唐代诗人白居易于元和十二年(817年)初夏在江州(今九江)庐山上大林寺时即景吟成的一首七绝。此诗说初夏四月作者来到大林寺,此时山下芳菲已尽,而不期在山寺中遇上了一片刚刚盛开的桃花。诗中写出了作者触目所见的感受,突出地展示了发现的惊讶与意外的欣喜。全诗把春光描写得生动具体,天真可爱,活灵活现;立意新颖,构思巧妙,趣味横生,是唐人绝句中一首珍品。
2023-08-01 19:22:201

《这就是中园》1~30集主要讲的什么?

这就是中国1至30级,主要讲了什么?讲了中国的发展
2023-08-01 19:22:2114

"话题"这一单词用英语怎么说

topic topic topic
2023-08-01 19:22:213

linux怎么念,是怎么发音?

linux的读音是["li:nэks]。Linux操作系统,是一种计算机操作系统,中文读法大致一般为“哩内克斯”,但真正的读法应为“哩纳克斯”。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。绝大多数基于Linux内核的的操作系统使用了大量的GNU软件,包括了shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如Emacs。正因为如此,GNU计划的开创者理查德·马修·斯托曼博士提议将Linux操作系统改名为GNU/Linux。但有些人只把操作系统叫做"Linux"。Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途,同时它们都尽可能被编写得更好。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
2023-08-01 19:22:211

高中完形填空选新东方还是星火英语好

个人认为星火英语的比较好。如果是高一年级,可先用星火英语,熟悉一下高中里面与中考不一样的题型。如果是高二或者高三党,两本皆可,看你自己的英语水平了。星火英语挺好的。集团致力于教育事业的研究与发展,本着同心多元化的发展战略,现已发展成为集图书在线教育版权贸易数字出版于一体的大型综合文化产业集团。
2023-08-01 19:22:251

跪求变形金刚里面 所有变形金刚的车 飞行 坦克的详细资料!!!!

不用下跪,请看78动漫网
2023-08-01 19:22:252

“请接收”在商务信函中怎么用英文表达?

Please check.
2023-08-01 19:22:266

topic什么意思

topic 英["tu0252pu026ak]美[u02c8tɑpu026ak]n. 主题;话题,论题;标题,细目名词复数:topics[例句]* Isaacson says the one topic jobs refused to discuss was philanthropy.*艾萨克森说,慈善是乔布斯拒绝讨论的一个话题。
2023-08-01 19:22:291

bmi是什么意思?

bmi是什么意思?介绍如下:BMI的意思是身体质量指数。MI的意思是身体质量指数。BMI被公认为反映蛋白质热量营养不良以及肥胖症的可靠指标,可以对不同性别、年龄人群进行比较。BMI计算方法为体重公斤数除以身高米数平方得出的数字。这是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。我国的诊断标准则为:BMI=18.5~23.9属正常体重;BMI=24.0~27.9属超重;BMI≥28.0为肥胖。但是,单独采用BMI评判肥胖及其程度不能反映年龄、性别、种族、疾病等差异造成的体脂含量及分布的不同。建议BMI超过正常范围的人群,及时就医,在医生指导下,科学减重。体重:体重,就是指在人体在健康状态下合理范围内的体重与身高比,而这个标准体重指数也是国际医疗组织、体检机构来衡量人体胖瘦与健康的标准之一。胖百病来,身体太瘦或者太胖都是不正常的,太瘦就会出现营养不良,太胖就会出现“三高”,过胖和过瘦还会降低的身体的美感。标准体重计算公式又称为BMI计算公式,一个健康人的正常BMI值范围应该是在:18.5~24之间,而标准体重只是一个相对的概念,并没有一个固定的数值,可以说BMI是一种相当简陋的健康评估方式,因为它没有考虑到身体的外观或机能表现等,虽然它对于宏观人口研究是个不错的工具,但对于个体而言并不适合。
2023-08-01 19:22:311

美国的变形金刚中的元始天尊和中华道教元始天尊,他们是什么关系?

没关系,名字一样,翻译的问题
2023-08-01 19:22:332

linux读音是什么啊?

linux的读音是["li:nэks]。Linux操作系统,是一种计算机操作系统,中文读法大致一般为“哩内克斯”,但真正的读法应为“哩纳克斯”。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。绝大多数基于Linux内核的的操作系统使用了大量的GNU软件,包括了shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如Emacs。正因为如此,GNU计划的开创者理查德·马修·斯托曼博士提议将Linux操作系统改名为GNU/Linux。但有些人只把操作系统叫做"Linux"。Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途,同时它们都尽可能被编写得更好。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
2023-08-01 19:22:341

一首英文歌有一句歌词是lululullaby,名字是lullaby ,但是不知道是哪位女歌手的,知

Tynisha Keli的lullaby
2023-08-01 19:22:365

求变形金刚真人版中博派和狂派的角色

博派汽车人(Autobots)   擎天柱(Optimus Prime)  原型:红色的卡车头  特长:出众的指挥领导才能,能够把汽车人团结在一起,标志性武器是手中的激光枪,在第二集中他的武器升级为灼热的双刀。   语录:自由是所有具有感知生物的权利  配音:彼得·卡伦  擎天柱不是汽车人唯一一任首领,但他却是名气最大的一个。多年前他被“Matrix of Leadership”(值于机器人首领胸中的一种固件,相当于王冠)选中成为新的首领,他个性谦逊、充满正义感,是完美英雄的化身。当他带领着部下准备作战时,总会说那句著名的台词“汽车人,变形出发!”(Transform and Rollout!)。   关于变形:不管玩具、动画片还是电影版,擎天柱变形后都是一个红色的卡车头,只是在卡车头的设计上有所不同。   铁皮(Ironhide)  原型:通用公司GMC越野车  特长:铁皮可以射出温度极低的液氮子弹和温度很高的铅弹,他还装备有声纳、雷达、无线电波探测器。尽管在汽车人里数他速度最慢,但他的外壳由Trithyllium钢合金制成,这种合金中含有辐射碳纤维,从而使他不易受到攻击。   语录:高科技电路无法取代血性  配音:杰斯·哈梅尔  铁皮是擎天柱的老友,在汽车人兄弟中要数他参加的战斗最多,他虽然粗野强悍,但本性善良,就像个随时准备掏枪的牛仔。铁皮通常负责一些重要人、物的保卫工作,同时也是擎天柱的私人保镖。   关于变形:电影版中变形后是一辆通用公司的GMC越野车。   救护车(Ratchet)  原型:通用悍马H2抢险救急车  特长:高超的机械修理工程师。  语录:你破坏我修理。  配音:罗伯特·福克沃斯  在汽车人中担当了“医生”的角色,虽然“治病救人”是他的工作,但作战起来他也丝毫不逊色,他的勇气和忠诚经得起时间的考验。   关于变形:原来的动画片里是一辆救护车,但在电影版里他变形后是通用“悍马H2”(Hummer H2)抢险救急车。   大黄蜂(Bumblebee)  原型:通用雪佛兰Camaro  特长:个性顽皮、优秀侦察员、机动灵活,作战形态下,整个头部活脱脱就是一个“大黄蜂头”  语录:最不起眼的人也可能是最危险的人。  配音:马克·瑞恩  在汽车人大家族里大黄蜂算个头小的,经常被其它同伴当作小弟弟,不过他执行起危险任务可一点不比别人逊色。他和人类男孩萨姆(Sam Witwicky)建立了坚固的友谊,在第二集中萨姆要上大学不能带大黄蜂去,大黄蜂还为此哭了并闹了脾气。影中对大黄蜂的形象塑造非常成功,比原动画片里还让人印象深刻,导演迈克尔·贝曾公开表示自己最喜欢这个角色。   关于变形:动画片中他变形后是一辆甲壳虫,电影版中变形后是黄色的通用雪佛兰Camaro车   横炮(Sideswipe)  拥有酷炫的外形,脚踩双轮的横炮无疑将成为汽车人中的新亮点。在原动画片中横炮和飞毛腿(Sunstreaker)是双胞胎兄弟,两人战斗力不相上下,但个性迥然不同,横跑勇敢鲁莽、更受人欢迎。   特长:横炮的两臂可以作为打桩机,使他方便的穿过防御系统   语录:我不会破坏规则,但我会最大程度的改变规则。  关于变形:动画片里他变形后是兰博基尼的康塔奇跑车,电影版中他是雪佛兰“考维特黄貂鱼百年”概念跑车(Corvette Stingray Concept)   阿尔茜(Arcee)  《变形金刚》中为数不多的女金刚之一,本来上一集就准备登场的,在《变形金刚:堕落者的复仇》中通体粉红、身材玲珑的阿尔茜以及她的两个姐妹将为这部充满钢铁打斗的动作片带来了些许柔和的色彩。不过由于导演迈克尔·贝不太喜欢这个角色,她很可能在本集中“牺牲”。   特长:速度、灵巧度、能量弓箭   语录:外表总是具有欺骗性。   关于变形:动画片里她变形后是一辆粉色的敞篷车,电影版中她是一辆粉红色的哈雷戴维森2006款Buell Firebolt摩托车,供梅根·福克斯驾驶。   天火  变形金刚中的老爷爷了,因此电影中把他设计成长着胡子的机器人。他的能量正在耗尽,每次降落都会发出咯吱声,变形也变得不顺溜,就像患了关节炎。他曾是红蜘蛛的好友,几百万年前在一次科学探险中坠落地球,后来一直冰冻在北极。霸天虎发现了他并诱骗他加入狂派阵营,但当天火发现霸天虎的真实目的后,毅然脱离了他们,转投汽车人阵营。   特长:尽管年老体衰、伤病缠身,但天火仍具有强大的火力和巡航能力,他还喜欢搞科研。   语录:胜利就孕育在对未知神秘事物征服的过程中。  关于变形:在电影版中他变形后是SR-71黑鸟战略侦察机。   狂派霸天虎(Decepticons)   威震天(Megatron)  狂派霸天虎们的领导,残忍冷酷好战,在上一集结尾他被汽车人打败并被丢进深海,在本集中他将复活,向汽车人展开疯狂的复仇。   特长:火力强大、力量巨大、老谋深算,以铁腕手段统治霸天虎。   语录:暴政才能带来和平。  关于变形:在动画片里威震天通常变成手枪或大炮,在电影版中他则变成飞机,在这一集中他将变成坦克。   红蜘蛛(Starscream)  霸天虎的第二号人物,狡猾而无谋略,虽然一直觊觎威震天的领导地位,且毫不掩饰,但一直未能如愿。红蜘蛛比威震天还要残忍好战,是汽车人的强大敌手之一。   特长:速度一流、体型庞大、火力威猛   语录:“征服就是把敌人都化成灰烬。”   关于变形:在电影版中他变形后为F-22猛禽式喷气歼击机。  巨蝎怪(Scorponok)  “巨蝎怪”名如其人,就是一只巨大的机器蝎子,在第一集中影迷已经领教过它的威力了,在第二集中它偷偷从美军那里把威震天的尸体偷走,并用自己的火种使其复活。   特长:能以每小时80公里的速度在坚硬的地底穿行,从而不被人察觉的偷偷行动。还能发射火箭。  堕落者(The Fallen)  本集中的大反派,在《变形金刚》漫画第二卷里曾出现过,电影版将首次充分演绎这个角色。堕落金刚非常古老,是赛伯坦星球创世神“元始天尊”(Primus)创造的第一批13个变形金刚之一,后来他背叛了“元始天尊”,和“元始天尊”邪恶的双胞胎兄弟“宇宙大帝”(Unicron)沆瀣一气,因此在战败后被流放于另一维度的时空。“堕落金刚”的加入让“Revenge of the Fallen”这一片名有了双重含义,为了介绍这一角色,影片还专门创作了一辑漫画。  特长:意念移物,还掌握着地球与变形金刚故乡——赛伯坦星球(Cybertron)上生命的钥匙
2023-08-01 19:22:161

topic这个单词怎么读

topic[英]["tu0252pu026ak][美][u02c8tɑpu026ak]n.主题;话题,论题;标题,细目复数: topics双语例句1.a topic much discussed in barrooms across the country全国各地酒吧间议论纷纷的话题2.a highly controversial topic颇有争议的话题3.a hotly debated topic激烈辩论的话题4.I have a meeting with my supervisor about my research topic.我要就我的研究课题同导师见一次面。5.The main topic of conversation was Tom"s new girlfriend.交谈的主要话题是汤姆的新女友。
2023-08-01 19:22:111

BMI是什么意思啊

上灵格斯字典查一下,常用简称都有
2023-08-01 19:22:076

linux的读音是什么,怎么读?

linux的读音是["li:nэks]。Linux操作系统,是一种计算机操作系统,中文读法大致一般为“哩内克斯”,但真正的读法应为“哩纳克斯”。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。绝大多数基于Linux内核的的操作系统使用了大量的GNU软件,包括了shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如Emacs。正因为如此,GNU计划的开创者理查德·马修·斯托曼博士提议将Linux操作系统改名为GNU/Linux。但有些人只把操作系统叫做"Linux"。Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途,同时它们都尽可能被编写得更好。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
2023-08-01 19:22:061

什么是中国的脊梁?

原句:我们自古以来,就有埋头苦干的人,有拼命硬干的人,有为民请命的人,有舍身求法的人,……虽是等于为帝王将相作家谱的所谓“正史”,也往往掩不住他们的光耀,这就是中国的脊梁。解释:1、在这段文字里,作者通过列举事实所确立的正面观点是我们有并不失掉自信力的中国人在,所批驳的观点是中国人失掉了自信力。2、“正史”加引号的作用是:对“正史”的否定。3、“这就是中国的脊梁”中“脊梁”指的是:支柱(中坚,栋梁)。扩展资料:这句话出自中国著名文学家鲁迅在民国时期所著的一篇杂文《中国人失掉自信力了吗》是鲁迅先生在民国时期所著的一篇驳论文。这篇文章最早于1934年刊发,后编入《且介亭杂文》。作于九一八事变三周年之际,反驳了当时社会对抗日前途的悲观论调以及指责中国人失掉了自信力的言论,鼓舞了民族自信心。
2023-08-01 19:22:051

星火英语四六级怎么查询成绩

在星火英语APP内。具体进入步骤:首要下载星火英语APP,假如是现已购买了实体星火英语教材的用户,能够直接扫描书本后面的二维码进入。进入使用后,自然是先注册并登录,借助手机号就能注册。进入软件主页面,点击左上角的菜单栏,挑选“四级”、“六级”、“考研”。既然是猜测分数,那么就需要在该平台先做几份相应等级的试卷,系统才干根据把握的内容进行估分。点击红色圆圈中的“图书配套-设置试卷”,匹配所购买的试卷,下载相应听力,进行听力测验。多测验几回后,系统会在主页显现猜测分数。现已考过试的同学假如心急分数,能够点击【估分神器】,挑选对应考试内容,系统采用逐题提交模式,做题无悔,根据考试的回忆挑选答案录入,即可获得对应分数,主观题则需要根据评分标准自行评分。假如回忆不错的话,基本上猜测的分数仍是比较准的,当然这也只是一种参阅,实际分数则需要发布成果后才干知晓。
2023-08-01 19:22:041

如何评价这就是中国

如何评价?这就是中国,我们的中国非常强大,无论是在经济还是在各个方面,我们的中国都非常常的突出,我为我在我生在中国而感到骄傲自豪
2023-08-01 19:21:584

史上最大的变形金刚动漫是叫什么名字?

宇宙大帝
2023-08-01 19:21:575

白居易写的关于“大林寺桃花”的古诗是什么

全诗如下:大林寺桃花唐代 · 白居易人间四月芳菲尽,山寺桃花始盛开。长恨春归无觅处,不知转入此中来。回答完毕,希望能帮到你,满意请点赞,谢谢!
2023-08-01 19:21:551

linux读音 ?

linux的读音是["li:nэks]。Linux操作系统,是一种计算机操作系统,中文读法大致一般为“哩内克斯”,但真正的读法应为“哩纳克斯”。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。绝大多数基于Linux内核的的操作系统使用了大量的GNU软件,包括了shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如Emacs。正因为如此,GNU计划的开创者理查德·马修·斯托曼博士提议将Linux操作系统改名为GNU/Linux。但有些人只把操作系统叫做"Linux"。Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途,同时它们都尽可能被编写得更好。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
2023-08-01 19:21:531

英语“收到”怎么说?

get it
2023-08-01 19:21:5010

topic是什么意思

话题
2023-08-01 19:21:494