最近 文章
【译】如何避免协程泄漏
Go语言最大的优势之一就是协程并发,但是,能力越大责任越大。 使用协程虽然很简单,但是如果不小心很容易引入难以排查的bug。 协程泄漏就是其中之一,随着协程数量的增长,最终会导致应用程序出现问题。 这篇文章列举了协程泄漏的各种场景,以及如何规避。
Hugo配置中级技巧(1):评论、网站统计、日期、字数、时长
一、支持评论
先看配置改动 9e9acc
Disqus 的交互设计太傻X了。
如何正确获取你需要配置的内容,见下面的导引:
首页->Get Start -> I want to install Disqus on my site -> Website Name。
这个Website Name 就是你需要再配置文件填入的内容
参考资料,Hugo官方文档: 点击
缓存和数据库一致性探讨,理解CAP理论
从用户信息查询开始
用户信息的存储是大家较为熟悉的场景,为了实现用户信息存储的基本功能。 我们需要将数据存入数据库。
查询的时候select。更新的时候update。
什么时候查询缓存?什么时候更新缓存 ?
当并发起来后,数据库的并发性能有限。这个时候就需要引入缓存慢,在查询时优先查缓存,以缓解数据库压力。 引入缓存,需要考虑一下两个问题:
- 1、什么时候查询缓存
- 2、什么时候更新缓存
PHP内存管理ZMM(五)-大内存区large_free_bucket的存入
之前的章节中介绍过large_free_bucket的存入条件。这一篇将介绍large_free_bucket的主要结构包括其中的链表结构和树结构和存入取出流程。本章讲通过图示大内存区域内存分部情况。
什么时候会向large_free_bucket存入内存块
这里在复习下存入large_free_bucket流程。在调用emalloc申请能存,且在当前heap中没有找到合适内存块,emalloc函数会调用malloc向内核申请内存。向内核申请每次只能申请 heap->block_size倍数大小内存。所以内核申请到的 heap->block_size倍数 大小的内存并不会全部返回到emalloc调用者,而是有剩余。
PHP内存管理ZMM(四)-GDB调试php源码并手动调用ZMM相关函数
本章讲介绍gdb调试php,并手动调用ZMM中申请内存和查找大内存块的函数
- _zend_mm_alloc_int
- zend_mm_search_large_block
为什么要手动调用函数
在阅读PHP ZMM源码的时候,有许多复杂的逻辑仅仅通过阅读源码很难理解,比如大内存large_free_buckets结构的构造。同构手动调用函数,可以方便的执行要申请的内存大小,从而测试构造large_free_buckets结构