多线程与进程池的区别

多线程

  1. 解决多任务同时执行的需求,合理使用CPU资源。 多线程的运行是由CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性。
  2. 由于不同进程中的线程可能并发执行,因而Windows支持进程间的并发性。此外,同一个进程中的多个线程可以分配给不同的处理器并且同时执行。一个含有多线程的进程在实现并发时,不需要使用多进程的开销。同一个进程中的线程可以通过它们的公共地址空间交换信息,并访问进程中的共享资源。不同进程中的线程可以通过在两个进程间建立的共享内存交换信息。
  3. 并发与并行的关系:
  • 并发:从宏观方面来说,并发就是同时进行多种事件,实际上,这几种事件,并不是同时进行的,而是交替进行的,而由于CPU的运算速度非常的快,会造成我们的一种错觉,就是在同一时间内进行了多种事情
  • 并行:则是真正意义上的同时进行多种事情。这种只可以在多核CPU的基础上完成。

线程池

1、概念

一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了**在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。**可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。

2、工作原理

在服务器程序启动时,创建固定数量(CPU的核数有关)的线程。这些线程的执行逻辑相同。将创建的线程维护在逻辑的池中(将所有创建的线程的执行阻塞),当主线程检测到有事件就绪,将就绪的事件通过某种方式传递给线程池中的一个线程(将一个线程唤醒)。
当服务器程序终止时,结束所有的线程。

3、线程池大类总共分为4种

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

fixThreadPool 正规线程(传统线程池)

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

cacheThreadPool 缓存线程池

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

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

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

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

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

4、【使用线程池的场景】

高并发并且执行时间较短的业务。可设置线程数为CPU核树+1,减少上下文的切换。

线程池与多线程的区别

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

参考

end!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Swlaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值