golang对共享内存的操作

不同进程间的内存是互相独立的,没办法直接互相操作对方内的数据,而共享内存则是靠操作系统提供的内存映射机制,让不同进程的一块地址空间映射到同一个虚拟内存区域上,使不同的进程可以操作到一块共用的内存块。共享内存是效率最高的进程间通讯机制,因为数据不需要在内核和程序之间复制。 共享内存用到的是系统提供的mmap函数,它可以将一个文件映射到虚拟内存的一个区域中,程序使用指针引用这个区域,对这个内存区域的操作会被回写到文件上,其函数原型如下: void *mmap(void *addr, siz...阅读全文

阅读:15121 评论:1

Go语言 类型断言性能测试

转载自达达的博客 在一些通用化的接口设计中,我们不得不用interface{}来代表任意类型,然后在接口内部用类型转换来判断具体类型,从而执行具体逻辑。但是类型判断是有性能代价的,如果能具像化的知道这个性能代价有多大,就可以帮助我们设计接口的时候判断应该怎么设计。 下面是实验代码(github): package labs01 import "testing" type InterfaceA interface { AA() } type InterfaceB interface { BB() ...阅读全文

2014-04-20 21:13 abv123456789
阅读:2821 评论:0

golang中map并发读写问题及解决方法

一、map并发读写问题 如果map由多协程同时读和写就会出现 fatal error:concurrent map read and map write的错误 如下代码很容易就出现map并发读写问题 func main(){ c := make(map[string]int) go func() {//开一个协程写map for j := 0; j < 1000000; j++ { c[fmt.Sprintf("%d", j)] = j } }() go func() { //开一个协程读map...阅读全文

2017-03-04 17:35 skh2015java
阅读:9350 评论:2

Go语言性能测试

对于一些服务来说,性能是极其重要的一环,事关系统的吞吐、访问的延迟,进而影响用户的体验。 写性能测试在Go语言中是很便捷的,go自带的标准工具链就有完善的支持,下面我们来从Go的内部和系统调用方面来详细剖析一下Benchmark这块儿。 Benchmark Go做Benchmar只要在目录下创建一个_test.go后缀的文件,然后添加下面函数: func BenchmarkStringJoin1(b *testing.B) { b.ReportAllocs() input := []string...阅读全文

2017-10-27 09:24 davygeek
阅读:3152 评论:1

golang select 小结

select 介绍 从不同并发执行的协程中,获取数据可以用select来完成。select监听的多个通道,也可以用通道发送数值。 select { // 接收数据 case u:= <- ch1: ... // 发送数据 case v:= <- ch2: ... ... default: // no value ready to be received ... } select 基本用法 1、如果多个通道都阻塞了,会等待知道其中一个通道可以处理。 2、如果多个通道都可以处理,随机选取一个处理。 ...阅读全文

阅读:4191 评论:1

Golang快速排序

版权所有,转载请注明:http://www.lenggirl.com/language/go-quicksort.html 定义 快速排序由C. A. R. Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。 基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 步骤 先从数列中取出一个数作为基准数。 分区过...阅读全文

2019.05.12 13:42 veeeeeeeeeeee
阅读:477 评论:0