线程:CPU使用的基本单元(线程ID、程序计数器、寄存器集合、栈)。
多线程:一个进程有多个线程
多线程的优点:
增加响应度:当一个交互程序部分阻塞,该程序能继续执行
一个应用程序在同一地址空间有多个不同的活动线程
经济:进程的创建需要的内存和资源分配比较昂贵,而线程能共享它们所属进程的资源,比较经济,并且,进程创建比线程创建费时,进程切换比线程切换费时
多处理器体系结构的利用:充分使用多处理器体系结构,以便每个进程能并行运行在不同的处理器上。不管有多少个CPU,单线程进程只能运行在一个CPU上。
线程有两种:用户层的用户线程和内核层的内核线程。
用户线程和内核线程建立关系的方法
1.多对一模型:多个用户线程映射到一个内核线程
优点:线程管理是由线程库在用户空间进行的,效率比较高
缺点:当一个线程阻塞,整个进程会阻塞,并且任一时刻只有一个线程能访问内核,多线程不能并行运行在多处理器上
2.一对一模型:将每个用户线程映射到一个内核线程
优点:一个线程阻塞,另个线程继续执行,允许多个线程能并行地运行在多处理器系统上
缺点:每创建一个用户进程需要创建一个内核进程,影响应用程序的性能
3.多对多模型:多路复用了许多用户线程到同样数量或更小数量的内核线程上(内核线程数量和特定机器有关)。也允许一个用户线程绑定到莫个内核线程,这个变种有时被称为二级模型
优点:没有前两者的缺点
多线程编程,每个请求若都要创建新进程处理,则会产生两个问题
1.创建进程的时间,进程用完了就被扔了
2.如果进程数量很多,会耗尽系统资源,如CPU时间和内存
为了解决这些问题,产生了线程池。
线程池,在进程开始时创建一定数量的线程,并放入到池中以等待工作,服务器当收到请求,唤醒线程工作,完成服务,线程又回到线程池中等待,若池中没有可用的线程,服务器就好一直等待有空线程为止。