feat(common): 添加无锁并发工具包依赖
新增 lockfree-1.1.3 工具包到 go.work 文件中,为项目提供无锁并发数据结构支持, 提升高并发场景下的性能表现。
This commit is contained in:
79
common/utils/lockfree-1.1.3/buffer_test.go
Normal file
79
common/utils/lockfree-1.1.3/buffer_test.go
Normal file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (C) THL A29 Limited, a Tencent company. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
*/
|
||||
|
||||
package lockfree
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
func TestA(t *testing.T) {
|
||||
sli := make([]uint8, 8)
|
||||
sh := *(*reflect.SliceHeader)(unsafe.Pointer(&sli))
|
||||
mem := unsafe.Pointer(sh.Data)
|
||||
Sets(mem)
|
||||
fmt.Printf("%v\n", sli[0])
|
||||
fmt.Printf("%v\n", sli[1])
|
||||
fmt.Printf("%v\n", sli[2])
|
||||
fmt.Printf("%v\n", sli[3])
|
||||
fmt.Printf("%v\n", sli[4])
|
||||
fmt.Printf("%v\n", sli[5])
|
||||
fmt.Printf("%v\n", sli[6])
|
||||
fmt.Printf("%v\n", sli[7])
|
||||
}
|
||||
|
||||
func Sets(mem unsafe.Pointer) {
|
||||
for i := 0; i < 8; i++ {
|
||||
*(*uint8)(unsafe.Pointer(uintptr(mem) + uintptr(i))) = 1
|
||||
}
|
||||
}
|
||||
|
||||
func TestX(t *testing.T) {
|
||||
loop := 1000000
|
||||
l := 1024 * 1024
|
||||
bytes := make([]byte, l)
|
||||
ts := time.Now()
|
||||
for i := 0; i < loop; i++ {
|
||||
bytes[i] = 0x01
|
||||
}
|
||||
tl := time.Since(ts)
|
||||
fmt.Println(tl.Microseconds())
|
||||
}
|
||||
|
||||
func TestBuffer(t *testing.T) {
|
||||
buf := newRingBuffer[uint64](1024)
|
||||
buf.write(0, 1)
|
||||
x := buf.element(0)
|
||||
fmt.Println(x)
|
||||
|
||||
buf.write(1023, 2)
|
||||
x = buf.element(1023)
|
||||
fmt.Println(x)
|
||||
|
||||
buf.write(1024, 3)
|
||||
x = buf.element(1024)
|
||||
fmt.Println(x)
|
||||
}
|
||||
|
||||
func TestBufferAlign32(t *testing.T) {
|
||||
buf := newRingBuffer[uint32](1024)
|
||||
buf.write(0, 1)
|
||||
x := buf.element(0)
|
||||
fmt.Println(x)
|
||||
|
||||
buf.write(1023, 2)
|
||||
x = buf.element(1023)
|
||||
fmt.Println(x)
|
||||
|
||||
buf.write(1024, 3)
|
||||
x = buf.element(1024)
|
||||
fmt.Println(x)
|
||||
}
|
||||
Reference in New Issue
Block a user