读写锁简介互斥锁我们都知道会锁定代码临界区,当有一个goroutine获取了互斥锁后,任何goroutine都不可以获取互斥锁,只能等待这个goroutine将互斥锁释放,无论读写操作都会加上一把大锁,在读多写少场景效率会很低,所以大佬们就设计出了读写锁,读写锁顾名思义是一把锁分为两部分:读锁和写锁
一、问题背景现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下:我在测试环境构造了500万条数据,模拟了这个慢查询。 简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。说一下app_acco
前言:因为最近在做一些gctrack的事情,所以打算了解一下V8GC的实现。介绍V8GC的文章网上已经有很多,就不打算再重复介绍。本文主要介绍一下新生代GC的实现,代码参考V810.2,因为GC的实现非常复杂,只能介绍一些大致的实现,读者需要对V8GC有一定的了解,比如新生代是分为from和to两个
当前,前端社区用Vite替代Webpack的呼声正日趋高涨。但对于长期维护的业务项目,很多同学可能仍然对上车存有疑虑——Vite真的足够支撑非玩具级的项目吗?为此本文会分享一个实际案例,介绍我们是如何(比较轻松地)在公司核心业务中落地Vite的。稿定Web端业务中的平面编辑器已经有五年以上的历史。作
并发VS并行在讲解并发概念时,总会涉及另外一个概念并行。下面让我们来聊聊并发和并行之间的区别。并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时
一.栈的基本概念💫栈是一种特殊的线性表。其只允许在固定的一端进行插入和删除元素的操作,进行数据的插入和删除的一端称作栈顶,另外一端称作栈底。栈不支持随机访问,栈的数据元素遵循后进先出的原则,即LIFO(LateInFirstOut)。也许有人曾经听说过压栈和入栈的术语,以下是它们的定义:压栈:栈的
前言今天主要讲类相关概念。构造和析构函数是否可以抛出异常在构造函数中抛出异常,控制权会转出构造函数之外,对象的析构函数不会被调用,造成内存泄漏。如果析构函数中抛出异常,而且没有在当地捕捉,析构函数便执行不全。类如何实现只能静态或动态分配只能静态分配,把new\delete运算符重载为private属