# 并发编程挑战
## 一、上下文切换
### 1、时间片
即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配**CPU时间片**来实现这个机制。
时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。
### 2、并行一定更快吗?
相同的程序,并行版本不一定比串行快。
因为CPU在由一个线程切换到另一个线程时,需要保留**该线程当下的执行状态**(执行到了哪一行,有哪些变量和变量值),在下次继续执行该线程时恢复到原来的状态,这个保存-恢复会消耗一定得到时间。
### 3、如何避免频繁的上下文切换?
* 1)、降低锁粒度: 如将数据的ID按照Hash算法取模分段,不同的线程处理�