进程
进程
用户角度 : 正在运行的程序
操作系统角度 :进程就是操作系统对于运行中程序的描述信息 - 进程描述符 - 统称PCB
多进程在于同一时间进程多任务并行进行。此时关口在于并行进程数量一般都比CPU数量多,这就需要并发,常见的为时间片轮转算法,即所有正在运行的进程轮流使用CPU,每个进程允许占用的CPU的时间很短,不同进程进行切换,同一时间有且仅有一个进程占用CPU
线程
在Linux下,线程以进程PCB模拟是实现。也就是说在Linux下线程是一个轻量级进程
在Linux中轻量级进程之间共享代码段,文件描述符,信号处理,全局变量时就是线程,如果不共享就是进程。
进程是资源管理的最小单位,线城是程序执行的最小单位,在操作系统中,线程较于进程最主要减少多进程上下文切换开销。
多线程在于一条进程中可以有多挑执行路径同时进行,一个线程就是进程中的一条执行路径。
线程进程
进程是线程的容器,一个进程可以有一个或多个线程
进程之间相互独立,但是同一个进程下线程之间共享程序的内存空间(代码段,数据集,堆等)和进程级资源,
进程间切换远远慢于线程
线程池
线程使用模式, 线程过多会带来调用开销,进而影响缓存局部性和整体性能,而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,此时可以避免在处理短时间任务时创建和销毁线程的代价,线程池不仅能够保证内核的充分利用,还能防止过度调度,可用线程数量取决于并发处理器,处理器内核,内存,网络sockets的数量
线程池的应用场景:
- 需要大量的线程来完成任务,且完成任务的时间比较短,类似web服务器请求网页的任务,可以使用,因为单任务小,而任务数量巨大,但是对于Telent连接请求,线程池就不再合适,Telent会话时间比线程创建时间长的多
- 对性能要求苛刻,比如服务器迅速响应客户请求
- 接受突发性大量请求,但不至于使服务器因此产生大量线程的应用。突发性大量客户请求,在美哦与线程池的情况下,将产生大量线程,理论上大部分操作系统线程数最大值不是问题,但是短时间内可能使内存达到上限。
线程池的种类: