并发编程基础

CPU时间片轮转机制

CPU时间片轮转机制也称时间片轮转法(Round-Robin,RR)主要用于分时系统中的进程调度。时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一时间段,称作它的时间片,即该进程允许运行的时间。

进程之间的切换会产生上下文切花,每次切换需要耗费5000到2W个时钟周期。所有我们在进行并发编程的过程中因该尽量减少上下文的切换。

怎样减少上下文的切换

  • 无锁并发编程:多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁。
  • CAS算法:Java的Atomic包使用CAS算法来更新数据,而不需要加锁。
  • 使用最少线程: 避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,这样会造成大量线程都处于等待状态。
  • 协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。

进程和线程

进程是程序运行资源分配的最小单位,进程内部可以有多个线程,线程之间会共享进程分配到的资源。
线程是CPU调度的最小单位,它不能单独存在,必须依附于进程。

打个比方,打开一个QQ应用是以进程,QQ里面的多个聊天窗口是线程。

并行和并发

并行同一时刻可以同时处理事情的能力,如CPU有一个核,那么并行度就是多少。
并发单位时间内可以处理事情的能力,如QPS。

并行强调的是同一时刻,而并发强调的是一个时间段

使用并发编程的优缺点

优点:充分利用系统资源。
缺点:线程间对共享资源的访问存在竞争;线程太多就产生大量的上下文切换,造成系统资源的浪费;增加系统发杂度。

推荐阅读更多精彩内容