Go语言中的并发问题研究
摘要 | 第5-7页 |
ABSTRACT | 第7-9页 |
第一章 绪论 | 第15-20页 |
1.1 研究背景和意义 | 第15-16页 |
1.2 研究现状 | 第16-19页 |
1.2.1 死锁问题 | 第17页 |
1.2.2 数据竞争问题 | 第17-18页 |
1.2.3 其他语言的并发问题 | 第18-19页 |
1.3 论文章节安排及主要研究成果 | 第19-20页 |
第二章 基础知识 | 第20-46页 |
2.1 并发编程 | 第20-26页 |
2.1.1 并发任务 | 第20页 |
2.1.2 并发方式 | 第20-22页 |
2.1.3 并发错误 | 第22-26页 |
2.2 Go语言基础知识 | 第26-36页 |
2.2.1 Go语言简介 | 第26-28页 |
2.2.2 Go语言的基本语法 | 第28-35页 |
2.2.3 Go项目的管理 | 第35-36页 |
2.3 Go的并发 | 第36-45页 |
2.3.1 Goroutines | 第37-38页 |
2.3.2 Channel | 第38-39页 |
2.3.3 调度器 | 第39-41页 |
2.3.4 并发原语 | 第41-45页 |
2.4 本章小结 | 第45-46页 |
第三章 Go语言的并发模式分析 | 第46-70页 |
3.1 Go语言性能的对比分析 | 第46-49页 |
3.2 Go语言并发的应用 | 第49-53页 |
3.3 Goroutine的使用分析 | 第53-59页 |
3.3.1 gRPC的Benchmark简介 | 第53-54页 |
3.3.2 Goroutine与线程的对比 | 第54-59页 |
3.4 Go语言并发原语的使用分析 | 第59-68页 |
3.4.1 分析思路概述 | 第60-61页 |
3.4.2 共享内存的同步 | 第61-64页 |
3.4.3 消息传递的同步 | 第64-68页 |
3.4.4 总结分析 | 第68页 |
3.5 进一步讨论 | 第68-69页 |
3.6 本章小结 | 第69-70页 |
第四章 Go并发Bugs的分析 | 第70-99页 |
4.1 Go的并发Bugs初识 | 第70-73页 |
4.1.1 Go的并发Bugs的收集 | 第70-71页 |
4.1.2 Go的并发Bugs的分类 | 第71-72页 |
4.1.3 Go的并发Bugs的重现 | 第72-73页 |
4.2 Go的阻塞型Bugs | 第73-88页 |
4.2.1 Go的阻塞型Bugs的形成原因分析 | 第73-84页 |
4.2.2 Go的阻塞型Bugs的修复 | 第84-86页 |
4.2.3 Go的死锁检测器的评估 | 第86-88页 |
4.3 Go的非阻塞型Bugs | 第88-97页 |
4.3.1 Go的非阻塞型Bugs的形成原因分析 | 第88-93页 |
4.3.2 Go的非阻塞型Bugs的修复 | 第93-95页 |
4.3.3 Go的数据竞争检测器的评估 | 第95-97页 |
4.4 进一步讨论 | 第97页 |
4.5 本章小结 | 第97-99页 |
第五章 Go并发Bugs的检测 | 第99-115页 |
5.1 Go的中间代码 | 第99-103页 |
5.2 Go并发Bugs的静态检测方案 | 第103-112页 |
5.2.1 阻塞型Bugs的检测 | 第104-109页 |
5.2.2 非阻塞型Bugs的检测 | 第109-112页 |
5.3 Go并发Bugs的动态检测方案 | 第112-114页 |
5.3.1 基于垃圾回收器的局部死锁检测方案 | 第112-113页 |
5.3.2 基于资源超时等待的死锁检测方案 | 第113-114页 |
5.4 本章小结 | 第114-115页 |
第六章 全文总结与展望 | 第115-117页 |
参考文献 | 第117-124页 |
致谢 | 第124-126页 |
博士在读期间完成的论文 | 第126-127页 |
博士在读期间参与完成的项目 | 第127页 |