并发编程基础
2019-03-18 本文已影响38人
xiaolyuh
CPU时间片轮转机制
CPU时间片轮转机制也称时间片轮转法(Round-Robin,RR)主要用于分时系统中的进程调度。时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一时间段,称作它的时间片,即该进程允许运行的时间。
进程之间的切换会产生上下文切花,每次切换需要耗费5000到2W个时钟周期。所有我们在进行并发编程的过程中因该尽量减少上下文的切换。
怎样减少上下文的切换
- 无锁并发编程:多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁。
- CAS算法:Java的Atomic包使用CAS算法来更新数据,而不需要加锁。
- 使用最少线程: 避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,这样会造成大量线程都处于等待状态。
- 协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。
进程和线程
进程是程序运行资源分配的最小单位,进程内部可以有多个线程,线程之间会共享进程分配到的资源。
线程是CPU调度的最小单位,它不能单独存在,必须依附于进程。
打个比方,打开一个QQ应用是以进程,QQ里面的多个聊天窗口是线程。
并行和并发
并行:同一时刻
可以同时处理事情的能力,如CPU有一个核,那么并行度就是多少。
并发:单位时间内
可以处理事情的能力,如QPS。
并行强调的是同一时刻,而并发强调的是一个时间段
使用并发编程的优缺点
优点:充分利用系统资源。
缺点:线程间对共享资源的访问存在竞争;线程太多就产生大量的上下文切换,造成系统资源的浪费;增加系统发杂度。