现代的操作系统都提供了单个进程包括多个控制线程的特性。
线程,有时候称为轻量级进程(lightweight process,LWP),是CPU使用的基本单元;它包含了线程ID,程序计数器,寄存器集合以及堆栈。它与属于同一进程的其他线程共享代码段,数据段和其他的操作系统资源。
现代的应用程序通常都是一个具有多线程的独立进程。例如,Chrome浏览器。当我们用它打开一个网页的时候,它是这样工作的,一个线程从网络接受数据,另一个线程在负责显示文本或者图片,还可能有另一个线程在显示视频。这样我们看到网页的时候才不会等待很长时间。如果是单线程进程,那么它可能的执行的过程是这样的。先把所有的数据下载完成,然后再来处理文本显示和图片显示,接着处理视频文件。这样的方式显然是用户不想看到的。所以多线程的产生是必然的。
多线程编程的优点:
用户级线程无需内核支持,它是通过线程库提供的创建,调度和管理的。但是这样有一个缺点,就是内核不知道用户级线程的存在。如果内核是单线程的,那么用户级线程的执行如果引起阻塞,那么将会引起整个进程阻塞。不会切换到下一个进程。
内核级线程由操作系统直接支持,内核在其空间内执行线程创建,调度和管理。由于线程也要在内核中注册,所以比起用户级线程,内核级线程的创建和管理要慢一些。但是好处是当一个线程阻塞时,内核能调度该进程内的另外一个线程来执行。而不是直接导致该进程阻塞,切换到下一个进程去执行。
多核CPU它本质上是一个处理器,只不过有多个核心。例如我们手机处理器现在大多数是8核心的。但是它还是单处理器。多核解决了缓存分离和数据冲突等引起的错误。
多核是共用了MMU和Cache等系统资源,但是多处理器则是每个处理器都有一套属于自己的MMU和Cache。没有多核就没有多线程。多核的模型完美处理了多线程。