CPU 高速缓存对性能的影响

我们用 Go 写两个遍历两层 slice 的算法。 var items = make([][]int32, 1000) func init() { for i := 0; i < 1000; i++ { items[i] = make([]int32, 1000) for j := 0; j < 1000; j++ { items[i][j] = rand.Int31n(2) } } } // 横向遍历 func sumRows() int { var sum = 0 for

操作系统
发布于 5年前

数据争用和竞态条件

在多线程编程中数据争用和竞态条件经常会被提到,怎奈何我写了4年PHP而PHP不支持线程并发编程,虽然这两个概念说的具体问题我还是有所了解,但是初看到这两个概念其实听陌生的。 数据争用 多个线程对同一个变量、同时地、进行读/写操作并且至少有一个线程进行写操作的现象叫做数据争用。如果发生了数据争用,那么一个多线程程序运行完毕时受到数据争用的变量的值是不可预测的。我们可以用锁来避免数据争用。 数据争用的例子(go) package main import ( "fmt" "sync" ) var ( N = 0 waitgroup sync.Wai

操作系统
发布于 5年前
  • 1