并发的知识点
并发
首先是为什么会有多线程?
这是因为,对于我们遇到的大部分编程问题来说,我们都可以使用顺序编程来解决,但是对于另外的一小部分问题来说,如果可以并行的执行程序中的多个部分,就会变得非常方便和必要。这些问题看起来要么在并发的执行,要么在多处理器上同时执行。
追求更快的执行
如果我们拥有一台多核处理器的机器,那我们就可以在处理器上分布多个任务,从而极大的提高吞吐量。我们知道,在为每个请求分配一个线程的程序中,可以将大量的用户请求分布到多个CPU上,CPU同时运行,可以提高程序的运行速度。但是,并发通常是提高运行在单核处理器上的程序的性能。
想一下啊,我们在单核处理器上顺序运行程序所用的开销,好像比在单核处理器上并发程序要的开销小很多,因为并发会不停的切换上下文。那并发为什么还有使用的必要呢?这就要考虑一个让很多人摸不着头脑的问题:线程堵塞。
如果程序中的某个任务因为该程序控制范围之外的某些条件(通常都是I/O),而导致不能再继续执行下去,那么我们就说,这个任务或者是线程堵塞了。通俗点说就是我们正在运行的程序,没有立即得到操作系统的响应,无法继续执行下去,就造成了堵塞。如果没有并发的话,那么整个程序都会停下来,直至外部条件发生变化。
但是当我们使用并发的时候,一个任务发生堵塞的时候,程序中的其他任务还是可以继续执行的,因此这个程序还是可以保持继续向前执行。事实上,如果没有堵塞,那也就没有并发的必要了。
实现并发最直接的方式就是在操作系统级别使用进程。进程是运行在它自己地址空间内的自包容程序。多任务操作系统可以通过周期性的将CPU从一个进程切换到其他进程,来实现同时运行多个进程,尽管这使得每个进程的执行过程看起来都是停停歇歇。进程是迷人的,因为操作系统通常会将进程之间相互隔离,使得他们互不干涉。每个任务都作为进程在自己的地址空间内运行,最重要的是,进程之间没有任何通信的必要。
基本的线程机制
线程机制将程序划分为多个可以分离的,独立运行的任务。通过使用多线程机制,这些独立任务中的每一个都将由执行线程来驱动。一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务,但是你的程序使得这些任务好像都有其自己的CPU一样,其底层机制就是切分CPU时间片。
在使用线程时,CPU将轮流给每个任务分配其占用时间。每个任务都觉得自己一直在占用CPU,但事实上,CPU时间时划分成片段分配给了所有的任务。
浙公网安备 33010602011771号