cpu为线程分配时间片,时间片非常短(毫秒级别),cpu不停的切换线程执行,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态,让我们感觉是多个程序同时运行的
我们知道上下文的频繁切换,会带来一定的性能开销, 那么如何减少上下文切换的开销?
无锁并发编程:多线程竞争锁时,会引起上下文切换,所以多线程处理数据时, 可以用一些方法来避免使用锁, 如将数据的ID按照Hash算法取模分段, 不同的线程处理不同段的数据
CAS:Java的Atomic包使用CAS算法来更新数据, 而不需要加锁
使用最少线程: 避免创建不需要的线程, 比如任务很少, 但是创建了很多线程来处理, 这样会造成大量线程都处于等待状态
协程: 在单线程实现多任务的调度, 并在单线程里维持多个任务间的切换