0%

一、前言

在堆上申请和释放内存的性能不高,这应该是常识了,尤其释放大块内存时,耗时更长,甚至会阻塞其他线程。做性能优化时,一般会采用内存池等手段避免频繁的申请和释放内存。本文从内核的角度分析申请和释放内存时的阻塞瓶颈,及化解方法。

为了便于理解,本文从用户申请、访问、释放内存的角度出发,逐步深入探讨Linux的内存管理。本文以阻塞为线索,从堆内存和栈内存的区别,到malloc的原理,再到内存页的管理,逐步找出释放大块内存时阻塞的原因,然后再给出一种化解的方法。

Read more »

费曼技巧是一种简单有效的学习方法,简单来说就是假装把你要学习的概念教授给别人,如果不能讲清楚就重新学习。它有四个步骤:

  1. 选择一个你要学习的概念
  2. 假装要把它教给别人
  3. 如果发有解释不清的地方,就重新学习
  4. 尝试简化你的教授过程
Read more »

性能优化是一个庞杂的话题,不同的场景,不同的视角都会得到不同的理解。
比如:有的为了提高吞吐,有的为了降低延迟,有的为了节省资源。
他们并不是同一个问题,有时可以牺牲一定的延迟来换取更高的吞吐,比如批量处理;
有时可以用更多的存储空间来换取更低的延迟,比如哈希表……

本文讲述的是对计算密集型服务提高吞吐和降低延迟的优化经验和理解。

Read more »

前段时间做系统重构,需要一个快速的本地缓存,类似于黑名单,读多写少的那种。
之前一直用的是哈希表加读写锁的方案,如果出现大规模的写操作,会导致读操作被阻塞。
想找一个更高效的解决方案,最好是无锁。

Read more »

在读写分离的架构中通常需要一个高性能的缓存,而且这个缓存是读多写少的。
比如黑名单缓存,一个线程负责更新,多个线程读取。

Read more »

今天刷论坛时发现下面这段代码

1
i = 0x5f3759df - ( i >> 1 ); // what the fuck?

哈哈,刚看到这行时我也不禁说了一句:“what the fuck?”

Read more »

“请用C++写一个单例,考虑一下多线程环境。”
这是一个常见的面试题,别人问过我,我也问过别人。
这个问题可以很简单,也可以很复杂。

Read more »

先考虑一个常见的问题:如何搜索附近的人(车、银行、餐厅等)?
可以把这类问题抽象成:快速搜索二维(或者高维)空间上某一指定区域内的数据。
很明显,简单的二叉树或者哈希表解决不了这个问题。

Read more »

由于种种原因,我还是不太推荐在C++使用异常机制。所以也不捕获异常,如果有问题直接让它挂掉。
最近遇到一个问题,我的框架“帮”我捕获了vector抛出的越界异常,没有了core文件,很难定位问题具体出在哪一行。

Read more »

由于众所周知的原因,出现了“科学上网”这门技术。
由于VPN、ssh等在建立连接或通信是存在明显的特征,容易被针对,而且不是为“墙”而生的,在使用上多少有些蹩脚。所以shadowsocks应运而生。

Read more »