线程池和多线程的区别

线程池的概念

线程池大类总共分为4种

  • fixThreadPool 正规线程(传统线程池)
  • cacheThreadPool 缓存线程池
  • singleThreadPoll 单线程线程池(单例线程池)
  • ScheduledThreadPoll 周期性执行任务的线程池
fixThreadPool 正规线程(传统线程池)

含有核心线程,核心线程即为最大线程数量,没有非核心线程

cacheThreadPool 缓存线程池

可缓存线程池,最大线程数很大,它会为每一个任务添加一个新的线程,这边有一个超时机制,当空闲的线程超过一定时间内没有用到的话,就会被回收。

singleThreadPoll 单线程线程池(单例线程池)

只存在一个线程,通过指定的顺序将任务一个个丢到线程,排队等待执行,不处理并发的操作,不会被回收。

ScheduledThreadPoll 周期性执行任务的线程池

周期性执行任务的线程池,按照某种特定的计划执行线程中的任务,有核心线程,但也有非核心线程,非核心线程的大小也为无限大。适用于执行周期性的任务。

线程池与多线程的区别

  • 线程池是在程序运行开始,创建好的n个线程,并且这n个线程挂起等待任务的到来。而多线程是在任务到来得时候进行创建,然后执行任务。
  • 线程池中的线程执行完之后不会回收线程,会继续将线程放在等待队列中;多线程程序在每次任务完成之后会回收该线程。
  • 由于线程池中线程是创建好的,所以在效率上相对于多线程会高很多。
  • 线程池也在高并发的情况下有着较好的性能;不容易挂掉。多线程在创建线程数较多的情况下,很容易挂掉。

你可能感兴趣的:(Linux,C++)