1. 并发编程的基础知识
- 并发和并行的区别?
1.1 并发模型
1.1.1 抢占式
总控制权在操作系统手中,操作系统会轮流询问每一个任务是否需要使用 CPU,需要使用的话就让他使用,不过在一定时间之后,操作系统会剥夺当前任务的 CPU 使用前,把他排在询问队列的最后,再去询问下一个任务
- 例如
- windows
1.1.2 协作式
一个任务得到了 CPU 时间,除非他自己放弃使用 CPU,否则将完全霸占 CPU,所以任务之间需要写作,使用一段时间 CPU 然后放弃,其他任务也是如此,这样才能保证系统正常运行
- 例如
- 嵌入式系统,例如早期的游戏机系统
1.2 同步编程原语(Windows)
1.2.1 用户态和内核态
-
用户态: CriticalSection, SRWLock, InterLocked
-
内核态: Mutex, Event, Semaphore, AsyncIO
-
优缺点
- 用户态:速度快,无法命名,无法设置超时,容易卡死
- 内核态:速度慢(用户/内核态切换),可命名,可设置超时
-
推荐参考书
- Windows Via C++
-
问题:大的分布式系统,访问共享资源,如何加锁
-
答:把锁放在数据里面,利用数据库的锁和事务的特性就解决了