多线程 & 并发架构

用户头像
石印掌纹
关注
发布于: 2020 年 08 月 03 日

多线程

  • 启动线程数 = [任务执行时间 / (任务执行时间 - IO等待时间)] * CPU内核数 (system load值 = CPU 核心数)

  • 最佳启动线程数和 CPU 内核数量成正比,和 IO 阻塞时间成反比。如果任务都是 CPU 计算型任务,那么线程数最多不超过 CPU 内核数,因为启动再多线程,CPU 也来不及调度;相反如果是任务需要等待磁盘操作,网络响应,那么多启动线程有助于提高任务并发度,提高系统吞吐能力,改善系统性能。

  • 线程并不是越多越好

  • 线程创建本身是需要消耗资源的

  • 在 CPU 上进行线程上下文切换也是需要消耗资源

  • new 一个对象的过程:静态代码块 -> 静态变量 -> 父类构造函数 -> 子类构造函数

高并发

  • 高并发下存在的风险

  • 网络带宽耗尽

  • 服务器load飙升,停止响应

  • 数据库瘫痪

  • 秒杀系统

  • 静态化

  • 商品列表和详情页面都做静态化,本身商品是固定的变动不大,无需动态去数据库加载

  • 静态化页面中首先并没有提交页面的url,使用js动态去后台获取已经可秒杀的商品id,如果可秒杀,后台加随机数生成提交页面的url,也就是说秒杀开始之前,没有人知道提交页面的url

  • 图片合并

  • 8张图片合并成1张,通过css偏移确定点击哪张图片

  • 减少Http请求

  • 多阀门拦截,大幅度限制进入服务器请求数量

  • 限制进入秒杀页面,只有前1000个请求才能进入秒杀页面,之后的请求都会跳转到秒杀结束页面

  • 限制进入下单页面,只有前100个请求才能进入下单页面,之后的请求都会跳转到秒杀结束页面

  • 限制进入支付系统,同上

搜索引擎架构

  • 网络爬虫:爬取各个类型的url,并做去重

  • 建立倒排索引,计算链接关系(用于排序,保证搜索出来前面的数据就是用户真正需要的)

用户头像

石印掌纹

关注

还未添加个人签名 2018.11.22 加入

还未添加个人简介

评论

发布
暂无评论
多线程 & 并发架构