<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[myIddddd的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/myIddddd</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; myIddddd]]></copyright><item><title><![CDATA[GO语言自底向上优化]]></title><link>https://blog.csdn.net/myIddddd/article/details/132307763</link><guid>https://blog.csdn.net/myIddddd/article/details/132307763</guid><author>myIddddd</author><pubDate>Wed, 16 Aug 2023 22:59:57 +0800</pubDate><description><![CDATA[首先我们明白GO语言GC触发条件是由比例来触发的。例如，当前存活内存10GB，触发比例是100%，因此下次触发GC的时候是当内存达到20GB的时候触发GC。CFS算法在休眠进程在唤醒时会获得vruntime的补偿（减少vruntime，提高这个进程优先级），它在醒来的时候有能力抢占CPU是大概率事件，这也是CFS调度算法的本意，即。(值得注意的是，这部分多占用的物理内存依然是被除 Ballast 以外的对象所使用，不存在浪费问题，Ballast 本身仅仅存在于虚拟内存中，不会被实际地映射物理页面)]]></description><category></category></item><item><title><![CDATA[定位服务端出现大量 CLOSE_WAIT 状态]]></title><link>https://blog.csdn.net/myIddddd/article/details/132220007</link><guid>https://blog.csdn.net/myIddddd/article/details/132220007</guid><author>myIddddd</author><pubDate>Thu, 10 Aug 2023 22:24:38 +0800</pubDate><description><![CDATA[第 3 步没有做，有新连接到来时没有调用 accpet 获取该连接的 socket，导致当有大量的客户端主动断开了连接，而服务端没机会对这些 socket 调用 close 函数，从而导致服务端出现大量 CLOSE_WAIT 状态的连接。：第 2 步没有做，没有将服务端 socket 注册到 epoll，这样有新连接到来时，服务端没办法感知这个事件，也就无法获取到已连接的 socket，那服务端自然就没机会对 socket 调用 close 函数了。被动方，代码逻辑有问题，没close。]]></description><category></category></item><item><title><![CDATA[epoll的ET。 分别是边缘触发（edge-triggered，ET）和水平触发（level-triggered，LT）。]]></title><link>https://blog.csdn.net/myIddddd/article/details/132219528</link><guid>https://blog.csdn.net/myIddddd/article/details/132219528</guid><author>myIddddd</author><pubDate>Thu, 10 Aug 2023 22:14:17 +0800</pubDate><description><![CDATA[epoll 支持边缘触发和水平触发的方式，而 select/poll 只支持水平触发，一般而言，边缘触发的方式会比水平触发的效率高。]]></description><category></category></item><item><title><![CDATA[IO密集时epoll还高效吗？]]></title><link>https://blog.csdn.net/myIddddd/article/details/132219425</link><guid>https://blog.csdn.net/myIddddd/article/details/132219425</guid><author>myIddddd</author><pubDate>Thu, 10 Aug 2023 22:02:57 +0800</pubDate><description><![CDATA[连接密集（短连接特别多），使用epoll的话，每一次连接需要发生epoll_wait->accpet->epoll_ctl调用，而使用select只需要select->accpet，减少了一次系统调用。读写密集的话，如果收到数据，我们需要响应数据的话，使用epoll的情况下， read 完后也需要epoll_ctl 加入写事件，相比select多了一次系统调用。所以 在连接数多且不活跃下，epoll比较高效。连接数少且都很活跃下，select比较高效。io特别密集时为什么 epoll 效率不高。]]></description><category></category></item><item><title><![CDATA[MySQL的加锁原则]]></title><link>https://blog.csdn.net/myIddddd/article/details/132071098</link><guid>https://blog.csdn.net/myIddddd/article/details/132071098</guid><author>myIddddd</author><pubDate>Wed, 02 Aug 2023 20:50:10 +0800</pubDate><description><![CDATA[优化 2：索引上的等值查询，向右遍历时且最后一个值不满足等值条件的时候，next-key lock 退化为间隙锁。优化 1：索引上的等值查询，给唯一索引加锁的时候，next-key lock 退化为行锁。原则 1：加锁的基本单位是 next-key lock。是一个前开后闭区间。一个 bug：唯一索引上的范围查询会访问到不满足条件的第一个值为止。原则 2：查找过程中访问到的对象才会加锁。]]></description><category></category></item><item><title><![CDATA[一个 SQL 执行的很慢]]></title><link>https://blog.csdn.net/myIddddd/article/details/132070879</link><guid>https://blog.csdn.net/myIddddd/article/details/132070879</guid><author>myIddddd</author><pubDate>Wed, 02 Aug 2023 20:36:47 +0800</pubDate><description><![CDATA[(1)、没有用上索引：例如该字段没有索引；由于对字段进行运算、函数操作导致无法用索引。(1)、数据库在刷新脏页，例如 redo log 写满了需要同步到磁盘。2、这条 SQL 语句一直执行的很慢，则有如下原因。1、大多数情况下很正常，偶尔很慢，则有如下原因。(2)、执行的时候，遇到锁，如表锁、行锁。(2)、数据库选错了索引。]]></description><category></category></item><item><title><![CDATA[mysql数据库自增ID用完了会怎么样？]]></title><link>https://blog.csdn.net/myIddddd/article/details/132066613</link><guid>https://blog.csdn.net/myIddddd/article/details/132066613</guid><author>myIddddd</author><pubDate>Wed, 02 Aug 2023 16:54:38 +0800</pubDate><description><![CDATA[表尽可能都要设置主键，主键尽量使用bigint类型，21亿的上限还是有可能达到的，比如魔兽，虽然说row_id上限高达281万亿，但是覆盖数据显然是不可接受的。如果没有设置主键，数据库则会帮我们自动生成一个全局的row_id，新数据会覆盖老数据。如果设置了主键，那么将会报错主键冲突。]]></description><category></category></item><item><title><![CDATA[msql中为什么不用delete]]></title><link>https://blog.csdn.net/myIddddd/article/details/132052111</link><guid>https://blog.csdn.net/myIddddd/article/details/132052111</guid><author>myIddddd</author><pubDate>Tue, 01 Aug 2023 22:29:27 +0800</pubDate><description><![CDATA[通过从InnoDB存储空间分布，delete对性能的影响可以看到，delete物理删除既不能释放磁盘空间，而且会产生大量的碎片，导致索引频繁分裂，影响SQL执行计划的稳定性；为了实现数据归档需求，可以用采用MySQL分区表特性来实现，都是DDL操作，没有碎片产生。另外一个比较好的方案采用Clickhouse，对有生命周期的数据表可以使用Clickhouse存储，利用其TTL特性实现无效数据自动清理。同时在碎片回收时，会耗用大量的CPU，磁盘空间，影响表上正常的DML操作。]]></description><category></category></item><item><title><![CDATA[mysql中6中索引失效问题]]></title><link>https://blog.csdn.net/myIddddd/article/details/132051112</link><guid>https://blog.csdn.net/myIddddd/article/details/132051112</guid><author>myIddddd</author><pubDate>Tue, 01 Aug 2023 21:21:53 +0800</pubDate><description><![CDATA[如果字符串是索引列，而条件语句中的输入参数是数字的话，那么索引列会发生隐式类型转换，由于隐式类型转换是通过 CAST 函数实现的，等同于对索引列使用了函数，所以就会导致索引失效。在 WHERE 子句中，如果在 OR 前的条件列是索引列，而在 OR 后的条件列不是索引列，那么索引会失效。联合索引要能正确使用需要遵循最左匹配原则，也就是按照最左优先的方式进行索引的匹配，否则就会导致索引失效。当我们在查询条件中对索引列进行表达式计算，也是无法走索引的。当我们在查询条件中对索引列使用函数，就会导致索引失效。]]></description><category></category></item><item><title><![CDATA[redis突然变慢问题定位]]></title><link>https://blog.csdn.net/myIddddd/article/details/132000691</link><guid>https://blog.csdn.net/myIddddd/article/details/132000691</guid><author>myIddddd</author><pubDate>Sat, 29 Jul 2023 22:04:56 +0800</pubDate><description><![CDATA[内存相关：bigkey 内存的申请和释放、数据过期、数据淘汰、碎片整理、内存大页、内存写时复制都与内存息息相关。CPU 相关：使用复杂度过高命令、数据的持久化，都与耗费过多的 CPU 资源有关。操作系统：写时复制、内存大页、Swap、CPU 绑定，都属于操作系统层面的知识。网络相关：短连接、实例流量过载、网络流量过载，也会降低 Redis 性能。计算机系统：CPU 结构、内存分配，都属于最基础的计算机系统知识。磁盘相关：数据持久化、AOF 刷盘策略，也会受到磁盘的影响。]]></description><category></category></item><item><title><![CDATA[redis常见面试汇总]]></title><link>https://blog.csdn.net/myIddddd/article/details/132000003</link><guid>https://blog.csdn.net/myIddddd/article/details/132000003</guid><author>myIddddd</author><pubDate>Sat, 29 Jul 2023 21:13:24 +0800</pubDate><description><![CDATA[redis常见面试汇总]]></description><category></category></item><item><title><![CDATA[redis之Bitmap]]></title><link>https://blog.csdn.net/myIddddd/article/details/131997775</link><guid>https://blog.csdn.net/myIddddd/article/details/131997775</guid><author>myIddddd</author><pubDate>Sat, 29 Jul 2023 17:31:51 +0800</pubDate><description><![CDATA[命令用于统计给定位数组中值为1的二进制位的数量。功能似乎不复杂，但实际上要高效地实现这个命令并不容易，需要用到一些精巧的算法。指定  中的了，接下来就要计算在8个字节中的第几位呢？3.二进制位统计算法:variable-precision SWAR。)，byte 值表示指定的  位于位数组的哪个字节(计算在第几行)；根据  和  在位数组中定位到目标值返回即可。算法，该算法通过一系列位移和位运算操作，可以。用于返回位数组在偏移量上的二进制位的值。目前已知效率最好的通用算法为。]]></description><category></category></item><item><title><![CDATA[redis分布式锁]]></title><link>https://blog.csdn.net/myIddddd/article/details/131997114</link><guid>https://blog.csdn.net/myIddddd/article/details/131997114</guid><author>myIddddd</author><pubDate>Sat, 29 Jul 2023 16:56:25 +0800</pubDate><description><![CDATA[Redis 作者继续论述，如果对方认为，发生网络延迟、进程 GC 是在步骤 3 之后，也就是客户端确认拿到了锁，去操作共享资源的途中发生了问题，导致锁失效，那这。]]></description><category></category></item><item><title><![CDATA[redis数据结构]]></title><link>https://blog.csdn.net/myIddddd/article/details/131987706</link><guid>https://blog.csdn.net/myIddddd/article/details/131987706</guid><author>myIddddd</author><pubDate>Fri, 28 Jul 2023 20:48:02 +0800</pubDate><description><![CDATA[C语言字符串底层也是一个数组，每次创建的时候就创建一个N+1长度的字符。Redis为了避免C字符串这样的缺陷，就分别采用了两种解决方案：1空间预分配。C是不记录字符串长度的，一旦我们调用了拼接的函数，如果没有提前计算好内存，是会产生缓存区溢出的。SDS结构存储了当前长度，还有free未使用的长度。SDS自己本身就保存了长度的信息。]]></description><category></category></item><item><title><![CDATA[HTTP协议各自特点]]></title><link>https://blog.csdn.net/myIddddd/article/details/131983542</link><guid>https://blog.csdn.net/myIddddd/article/details/131983542</guid><author>myIddddd</author><pubDate>Fri, 28 Jul 2023 16:53:38 +0800</pubDate><description><![CDATA[HTTP/2 是基于 TCP 协议来传输数据的，TCP 是字节流协议，TCP 层必须保证收到的字节数据是完整且连续的，这样内核才会将缓冲区里的数据返回给 HTTP 应用，那么当「前 1 个字节数据」没有到达时，后收到的字节数据只能存放在内核缓冲区里，只有等到这 1 个字节数据到达时，HTTP/2 应用层才能从内核中拿到数据，这就是 HTTP/2 队头阻塞问题。QUIC 有以下 3 个特点。HTTP/2 有什么缺陷？]]></description><category></category></item><item><title><![CDATA[GO语言栈内存空间管理]]></title><link>https://blog.csdn.net/myIddddd/article/details/131831222</link><guid>https://blog.csdn.net/myIddddd/article/details/131831222</guid><author>myIddddd</author><pubDate>Thu, 20 Jul 2023 15:20:54 +0800</pubDate><description><![CDATA[栈分配:  编译器+runtime结合实现。编译器会在函数头部安插检查栈大小是否够用代码，不够则调用runtime栈增长的函数。开辟个更大的--拷贝数据--释放原来的 唯一会收缩的地方就是GC。收缩完后再让出CPU。 协成运行结束时， 栈释放到哪里了呢？]]></description><category></category></item><item><title><![CDATA[Go语言mallocgc]]></title><link>https://blog.csdn.net/myIddddd/article/details/131830563</link><guid>https://blog.csdn.net/myIddddd/article/details/131830563</guid><author>myIddddd</author><pubDate>Thu, 20 Jul 2023 15:01:18 +0800</pubDate><description><![CDATA[runtime中new和make都依赖mallocgc。mallocgc分为4个阶段：辅助GC，空间分配，位图标记，收尾工作。]]></description><category></category></item><item><title><![CDATA[GO语言泛型]]></title><link>https://blog.csdn.net/myIddddd/article/details/131813323</link><guid>https://blog.csdn.net/myIddddd/article/details/131813323</guid><author>myIddddd</author><pubDate>Wed, 19 Jul 2023 17:11:35 +0800</pubDate><description><![CDATA[也就是泛型会为每个数据类型都生产一套代码,导致可执行文件大小增加,并且使用泛型。但是使用GET 需要使用类型断言,将取出来的数据转为预期数据,空接口本身是一个装箱,会产生内存逃逸和多一部分空间.缓存对象存储多个不同类型的值依然要用空接口,否则。于是1.17GO使用泛型.缓存对象只能存一种类型的值。set一般没什么不方便的。分析可执行文件后:发现。]]></description><category></category></item><item><title><![CDATA[GO语言方法集]]></title><link>https://blog.csdn.net/myIddddd/article/details/131810659</link><guid>https://blog.csdn.net/myIddddd/article/details/131810659</guid><author>myIddddd</author><pubDate>Wed, 19 Jul 2023 15:56:54 +0800</pubDate><description><![CDATA[因为我们A(a)接受者是第一个参数,而这个参数是动态派发的,参数放在栈的局部变量,编译器在编译阶段不能确定这个量的大小.而指针平台确定了大小也就确定了.面对这个问题,编译器选择为值接受方法生成指针同名方法。那为什么还要生产包装方法呢?主要是为了支持接口.]]></description><category></category></item><item><title><![CDATA[GO语言semaphore信号量]]></title><link>https://blog.csdn.net/myIddddd/article/details/131810077</link><guid>https://blog.csdn.net/myIddddd/article/details/131810077</guid><author>myIddddd</author><pubDate>Wed, 19 Jul 2023 15:40:06 +0800</pubDate><description><![CDATA[本质上.是结合自旋锁和调度器调度后的锁.不过这种机制适合线程不适合协程.因为调度器调度需要切换线程,而协成切换不能切换线程.一般地,我们唤醒在等待队列中的线程会使用系统调用和切换线程这样的开销比较大.在GO语言中,我们使用semaphore协程信号量来排队。协程等待一个锁如何等待和唤醒呢?]]></description><category></category></item></channel></rss>