Code Monkey home page Code Monkey logo

go-labs's Introduction

一些杂七杂八脑洞大开的实验:

实验 描述
labs01 测试类型判断和类型转换的效率
labs02 测试值传参和指针传参的效率
labs03 测试对象创建的效率
labs04 测试range循环和for循环,以及结构体循环和指针循环的性能区别
labs05 测试整数和浮点数的运算效率
labs06 测试小数据量循环和map取数据以及硬编码取数据的性能消耗
labs07 测试几种链表遍历查找的性能差异
labs08 同labs07,区别是用slice替代链表结构
labs09 测试匿名函数和普通函数的调用消耗
labs10 尝试绕过gc扫描
labs11 测试json序列化支持的类型
labs12 测试jsmalloc和malloc在go程序中是否有性能差别
labs13 测试不同数据结构的对象数量差别
labs14 测试用cgo复制go的内存数据和还原数据
labs15 测试unsafe伪造slice数据结构做内存表的查询效率
labs16 测试平方根算法的效率
labs17 尝试优化一段代码
labs18 测试switch和回调函数效率差异
labs19 测试缓存反射信息对效率的影响
labs20 测试Go调用C和C调用Go的效率差异
labs21 个测试goc机制调用c的实验
labs22 尝试把CGO生成的runtime·cgocall替换为runtime·asmcgocall
labs23 测试interface{}类型转换判断和布尔值判断效率差异
labs24 测试binary.Write和硬编码的效率差异
labs25 测试LockOSThread()对chan消息处理的影响
labs26 比较直接调用函数和反射调用函数的效率差别
labs27 测试不修改runtime代码的情况下获取goid的效率
labs28 测试[]bytestring的效率
labs29 测试不同压缩算法压缩json数据的压缩比和压缩效率。
labs30 内存数据库事务Demo
labs31 计算一个值在2的第N次幂区间(蛋疼的性能测试)

go-labs's People

Contributors

bg5sbk avatar realint avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-labs's Issues

链表遍历可能需要考虑cache miss

测试环境的数据分布在连续内存中:

func init() {
        for i := 0; i < 1000; i++ {
                var newData = new(BigStruct)
                newData.C30 = i
                newData.next = data
                data = newData
        }
}

真实环境中,玩家数据在内存中的分布可能不是连续的

func init_cache_miss() {
        for i := 0; i < 1800; i++ {
                var newData = new(BigStruct)
                if i%5 >= 3 {
                        newData.C30 = i
                        newData.next = otherUserData
                        otherUserData = newData
                } else {
                        newData.C30 = i
                        newData.next = data
                        data = newData
                }
        }
}

原始版本:

PASS
Benchmark_Loop1-8     300000          5156 ns/op
Benchmark_Loop2-8     200000          5891 ns/op
Benchmark_Loop3-8     100000         14506 ns/op
Benchmark_Loop4-8      20000         95709 ns/op
Benchmark_Loop5-8       3000        447557 ns/op
Benchmark_Loop6-8     200000          8395 ns/op
Benchmark_Loop7-8     200000          9301 ns/op
ok      go-labs/labs07  12.440s

模拟 cache miss 情况

PASS
Benchmark_Loop1-8     200000          9960 ns/op
Benchmark_Loop2-8     200000         10466 ns/op
Benchmark_Loop3-8     100000         18221 ns/op
Benchmark_Loop4-8      10000        107809 ns/op
Benchmark_Loop5-8       3000        507910 ns/op
Benchmark_Loop6-8     200000         11533 ns/op
Benchmark_Loop7-8     200000         11954 ns/op
ok      go-labs/labs07  13.934s

我觉得还是 slice 效率更优。因为 slice 可以保证同一个玩家的数据在一段连续内存。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.