Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

这个框架测试过高并发情况吗? #2

Open
lmh88 opened this issue Dec 3, 2018 · 3 comments
Open

这个框架测试过高并发情况吗? #2

lmh88 opened this issue Dec 3, 2018 · 3 comments

Comments

@lmh88
Copy link

lmh88 commented Dec 3, 2018

拜读过框架源码,发现源码很少加锁和原子操作,问一下这个是怎么避免高并发下的资源竞争和出错的?感觉代码有一些写java的思维在里面

@zhuxiujia
Copy link
Owner

拜读过框架源码,发现源码很少加锁和原子操作,问一下这个是怎么避免高并发下的资源竞争和出错的?感觉代码有一些写java的思维在里面

有部分生成sql和解码的性能测试,详见SqlResultDecodeUtil_test.go 和 SqlBuilder_test.go

@zhuxiujia
Copy link
Owner

zhuxiujia commented Dec 3, 2018

拜读过框架源码,发现源码很少加锁和原子操作,问一下这个是怎么避免高并发下的资源竞争和出错的?感觉代码有一些写java的思维在里面

无需使用锁或者channel等原子操作,因为本身就是多个读(指运行期xml数据多协程读),单个写入的

在高并发中,读写锁是表示,读的过程中可以有多个读,一旦碰到写的过程只能有一个写,即写的时候只能有一个写并且其他的不能读。
GoMybatis 只做了2阶段的工作,
第一阶段:
在服务启动前根据xml中的逻辑生成一个[]MapperXml。因为第一阶段是程序启动的时候做的基本上一个mapper对应一个go文件,故不存在资源竞争要加锁的情况。
第二阶段:
在服务运行期使用SqlBuilder根据新参数构建一条sql的string(多读,无竞争写入),然后根据mysql查询结果写入到新提供的struct上(无竞争写入),这里也不存在并发资源竞争情况

@zhuxiujia
Copy link
Owner

高并发测试情况现官网里现在写上了
https://zhuxiujia.github.io/gomybatis.io/info.html
并发测试的代码 也已经加入

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants