go-cpeh 的中 LockShared 性能好差啊

2019-09-23 15:15:03 +08:00
 bigpigeon

我想用 rados 的 object 存储文件,用 LockShared 和 LockExclusive 实现了一个读写锁 但当我测速时发现 LockShared 性能好低啊,每秒 20 个,我以为只是延迟高,但发现并发也没用


func newConn() *rados.Conn {
	conn, err := rados.NewConn()
	if err != nil {
		panic(err)
	}
	cephInitByFile(conn, "k8s_conf")
	err = conn.Connect()
	if err != nil {
		panic(err)
	}
	return conn
}

func init() {
	conn = newConn()
}
func TestConcurrencyLockShared(t *testing.T) {
	// open a pool handle
	oid := "concurrency_lock_shared"
	oidLock := "lock"
	maxExpired := time.Minute
	times := 100
	wg := sync.WaitGroup{}
	wg.Add(times)
	for i := 0; i < times; i++ {
		go func(i int) {
			defer wg.Done()
			ioctx, err := conn.OpenIOContext(poolName)
			require.NoError(t, err)
			res, err := ioctx.LockShared(oid, oidLock, "cookie"+fmt.Sprint(i), "", "lock test", maxExpired, nil)
			assert.NoError(t, err)
			assert.Equal(t, 0, res)
		}(i)
	}
	wg.Wait()
	wg.Add(times)
	for i := 0; i < times; i++ {
		go func(i int) {
			defer wg.Done()
			ioctx, err := conn.OpenIOContext(poolName)
			require.NoError(t, err)
			res, err := ioctx.Unlock(oid, oidLock, "cookie"+fmt.Sprint(i))
			assert.NoError(t, err)
			assert.Equal(t, 0, res)
		}(i)
	}
	wg.Wait()
}
2497 次点击
所在节点    Linux
1 条回复
bigpigeon
2019-09-24 10:39:04 +08:00
捞一下,有大佬知道原因吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603364

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX