高并发 协程

一、服务器高并发的解决方案

应用数据与静态资源分离

将静态资源(图片,视频,js,css 等)单独保存到专门的静态资源服务器中,在客户端访问的时候从静态资源服务器中返回静态资源,从主服务器中返回应用数据。

客户端缓存

因为效率最高,消耗资源最小的就是纯静态的 html 页面,所以可以把网站上的页面尽可能用静态的来实现,在页面过期或者有数据更新之后再将页面重新缓存,或者先生成静态页面,然后用 ajax 异步请求获取动态数据。

集群和分布式

(集群是所有服务器都有相同的功能,请求哪台都可以,主要起分流作用)

(分布式是将不同的业务放到不同的服务器中,处理一个请求可能需要使用到多台服务器,起到加快处理请求的速度)

可以使用服务器集群和分布式架构,使得原本属于一个服务器的计算压力分散到多个服务器上,同时加快请求处理速度。

反向代理

在访问服务器的时候,服务器通过别的服务器获取资源或结果返回给客户端。

二、协程了解吗?

协程和微线程是一个东西。

协程就是子程序在执行时中断并转去执行别的子程序,在适当的时候又返回来执行。

这种子程序间的跳转不是函数调用,也不是多线程执行,所以省去了线程切换的开销,效率很高,并且不需要多线程间的锁机制,不会发生变量写冲突。

三、那协程的底层是怎么实现的?

保存和恢复上下文

协程的实现关键在于能够在不同协程之间快速切换执行。这需要保存当前协程的执行上下文,

包括程序计数器、寄存器值、栈指针等,以便在下次恢复执行时能够准确地回到上次暂停地位置。当从一个协程切换到另一个协程时,将当前协程地上下文保存起来,然后加载目标协程上下文,实现执行权地转移。

例如,在一些编程语言地协程实现中,会使用特定地数据结构来存储协程地上下文信息,当需要切换时,通过对这些数据结构地操作来完成上下文地保存和恢复。

调度机制

协程需要一个调度器来决定何时切换协程以及切换到哪个协程。调度器可以根据不同的策略进行调度,如轮询调度、基于事件的调度等。

对于轮询调度,调度器会依次遍历所有可运行的协程,给予每个协程一定的执行时间片,当时间片用完后切换到下一个协程。基于事件的调度则根据特定的事件发生来触发协程的切换,例如当某个 I/O 操作完成时切换到等待该操作的协程继续执行。

栈管理

每个协程都有自己的栈空间,用于存储局部变量、函数调用参数等。协程的实现需要有效地管理这些栈空间,以确保协程之间地切换不会导致栈数据地混乱。

一种常见地做法是在协程切换时,根据需要动态地调整站的大小,或者使用共享栈的方式,多个协程共享一个较大的栈空间,通过一些标记和管理机制来区分不同协程在栈上的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值