笔记 线程(threads)

时间:2021-04-09 10:02:35

线程:CPU使用的基本单元(线程ID、程序计数器、寄存器集合、栈)。

多线程:一个进程有多个线程

多线程的优点:

增加响应度:当一个交互程序部分阻塞,该程序能继续执行

一个应用程序在同一地址空间有多个不同的活动线程

经济:进程的创建需要的内存和资源分配比较昂贵,而线程能共享它们所属进程的资源,比较经济,并且,进程创建比线程创建费时,进程切换比线程切换费时

多处理器体系结构的利用:充分使用多处理器体系结构,以便每个进程能并行运行在不同的处理器上。不管有多少个CPU,单线程进程只能运行在一个CPU上。

线程有两种:用户层的用户线程和内核层的内核线程。

用户线程和内核线程建立关系的方法

1.多对一模型:多个用户线程映射到一个内核线程

优点:线程管理是由线程库在用户空间进行的,效率比较高

缺点:当一个线程阻塞,整个进程会阻塞,并且任一时刻只有一个线程能访问内核,多线程不能并行运行在多处理器上

2.一对一模型:将每个用户线程映射到一个内核线程

优点:一个线程阻塞,另个线程继续执行,允许多个线程能并行地运行在多处理器系统上

缺点:每创建一个用户进程需要创建一个内核进程,影响应用程序的性能

3.多对多模型:多路复用了许多用户线程到同样数量或更小数量的内核线程上(内核线程数量和特定机器有关)。也允许一个用户线程绑定到莫个内核线程,这个变种有时被称为二级模型

优点:没有前两者的缺点

多线程编程,每个请求若都要创建新进程处理,则会产生两个问题

1.创建进程的时间,进程用完了就被扔了

2.如果进程数量很多,会耗尽系统资源,如CPU时间和内存

为了解决这些问题,产生了线程池。

线程池,在进程开始时创建一定数量的线程,并放入到池中以等待工作,服务器当收到请求,唤醒线程工作,完成服务,线程又回到线程池中等待,若池中没有可用的线程,服务器就好一直等待有空线程为止。