CPU cache and False sharing

例子

我们先看两个例子,操作对象是一个MATRIXSIZE*8的整型矩阵。 (具体Benchmark代码已经上传到GitHub上,有兴趣的可以拉下来自己测试一下)

一、遍历矩阵

分别以行优先和列优先来遍历:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func TraversalMatrixSumsByRow() int {
sum := 0
for i:= 0; i< MATRIXSIZE; i++ {
for j := 0; j<8; j++ {
sum += matrixs[i][j]
}
}
return sum
}

func TraversalMatrixSumsByColumn() int {
sum := 0
for i:= 0; i< 8; i++ {
for j := 0; j<MATRIXSIZE; j++ {
sum += matrixs[j][i]
}
}
return sum
}
测试结果如下:
Read more
什么是@autoclosure

Difference between '&&' and ','

本篇源自之前在Swift Forum上看到的一篇讨论: Is “&&” equal to “,”?:Swift里的&&,有什么区别?

1
2
3
4
5
6
7
8
9
10
var a: Bool
var b: Bool

if a && b {
//todo
}

if a, b {
//todo
}

首先这两种写法在语义上应该是完全一样的,那有什么区别的?

Read more
虚拟内存

0x00

首先看本文之前,先思考几个问题: 1. 在单CPU的电脑上,同一时间智能运行一个进程,CPU通过时间片的方式,模拟进程的同时运行。那多个运行的进程所使用的内存是如何管理的?是怎么保证多进程之间不会干扰到对方的内存区域 2. 电脑在内存占用非常高的时候变得很卡,是为什么? 3. mmap为什么会更快

Read more
How&Why Launch

Why

  最近断断续续的看了很多Draveness的Why's THE Design系列,受益良多,但同时接受度又不高,一个星期或者一个月之后可能就只记得20%,两个月之后就完全忘记了。所以在想用什么方法提高知识的接受和记忆度,想来想去觉得还是自己写最实在。互联网的快速发展带来的是信息(诸如新闻)严重的碎片化,我认为不光是信息,知识也是如此,特别是前一个场景:看别人博客的时候……

Read more