00:00
各位同学大家好,欢迎继续收看上硅谷guc高并发变声课程。下面呢,我们来学习doc中的另外一个知识点,Thread po线程池。线程池之前给各位说过,我们创建线程是不是有多种方式,包括你继承spread类实现re label接口,包括咱们之前讲那个口able接口,以及咱们现在要说这个thread pull线程池都可以用来创建线程,那我下面给各位同学咱们就来详细说一下线程池中的相关内容。首先咱们线程池从几个方面给各位来讲解,第一部分咱们先介绍线程池到底是什么,它的基本概念,然后给大家介绍线程池里面那个架构,就是它的类和接口的关系,以及咱们该怎么去使用线程池。
01:00
包括线程池的底层原理怎么样,里边有哪些参数,包括它的工作流程,最后咱们在自定义一个线程池,最终做个实现,所以这些是咱们要讲的线程池里边的相关内容,这个内容中呢,既有它的基本介绍,又有它的代码实践以及它的底层的工作原理,那下面我们来看一下我们这个线程池的内容,首先来看第一个什么是线程池,包括线程池到底是干什么的,给各位来说一下。大家看里面的这段话,线程池如果各位不知道,各位同学应该听过一个词叫连接池,这应该有印象,大家想一下啊,这个连接尺是干什么的?他是做什么的?给大家重复一遍,这各位应该都很清楚啊,连接池咱们是不是预先先创建好一些连接,然后每次操作从连接池中取到连接,然后你用完之后再放回到连接池中,供其他人是不是在使用,这叫连接池,它的作用就是减少你每次都创建和关闭,可以提高咱们这个连接的复用性,而线程池跟它应该是类似的,那我们来看一下线程池的这个特点。
02:23
我这里写到。线程尺英文select pro是一种线程的使用模式,线程过多呢会带来调度的开销,进而影响你这里边缓存的局部性或者说整体性能。而线程池干什么的?它就是维护着多个线程,等待着监督管理者分配可并发执行任务,而避免在短时间任务创建消费时代。我们有很多现场带来那个代驾或者带来各种开销,它可以保证咱们这个内核充分利用,从而能够防止你。
03:02
过度进行调用,这是它一个官方的一个描述。那说到这个线程池呢,给各位特别说一下啊,大家想一下,如果说咱们现在啊,在十几年前的时候,就是或者说20年前的时候,那个年代如果说你用电脑,当时的电脑是不是都是单核的,而单核电脑咱是不是要处理多个任务,就是一个多线程嘛,只是那个时候因为是单核处理嘛,所以它的多线程,所以是一个假的多线程,就好比说什么呢?举个例子啊。各位应该看过,在那个马戏团里边啊,一个角色叫小丑,小丑经常做件事情,本来一个人嘛,两只手,但是他拿了很多的球,这很多球是不是要来回进行切换呀,比如现在我两只手拿三个球,三个球不断进行切换,而早期CPU它就是通过来回进行切换实现处理这个多任务的,或者说多线程这个操作。
04:02
但是随着咱们基础发展,咱们目前用的CPU是不是都是双核,四核或者八核或者更多核,是不是都是这种处理,所以目前实现是一种真正的多线程的这么一种处理方式。那这个线程尺到底有什么优势呢?给各位来说一下,咱们看下面这段话里边的这么一个描述,线程尺度的工作呢,我只要控制运行的线程数量,而在处理过程中将任务放入我的队列中,然后在线池创建之后启用这些任务,如果线程数量超过了你最大数量,那我超出数量线程怎么样,是不是就等待呀,等其他线程执行之后,再从队列中取出任务来执行,所以这个过程跟咱连接池基本上应该是类似的这么一个过程,我们看一下线程池啊,有哪些主要的特点,第一个就是降低资源的消耗。
05:01
然后第二个就是提高想速度,因为这里写的当你重复利用线程,是不是可以极大降低的消耗,提高想速度,当你任务到达的时候,任务可以不需要等待线程创建,是不是可以立即执行。另外提高线程的可管理性,咱们用连接池做统一的管理。所以这些呢,就是关于连接池或者线程池的一个基本概念啊,刚才我一直提到连接池,其实大家可以这么理解啊,你把连接池的特点里面那个连接换成线程,就是线程池的特点,它跟连接池基本上是类似的一个过程。所以咱们现在。就把线程尺到底是怎么样一个特点给各位做这个说明,然后这个说完之后,下面我们继续来看一下关于线程池的另外的特点,然后咱们看第二部分线程池的这个东西,就是它这个架构,也就是说线程池里面那个类,包括接口一个关系是怎么样的,那我们来看一下啊,我这里写到Java中的线程池通过这个叫eor框架来实现,该框架中用到了eator eators和这个service,还有这个po e这几个类最终是线程池,而这些类有什么关系,咱们看一下我课件中的这张图上。
06:25
大家看啊。这个图怎么看,给大家说一下,咱看每个部分前面是不是一个字母啊,这个字母叫I,它表示什么?是不是叫interface接口啊,然后这个叫C,这表示什么?是不是一个类影,然后咱们看啊,首先它最顶层的接口叫eor,这是一个接口,下面有个子接口eor service,然后在下面还有这么一个子接口,包括有它的实线内啊,包括这个threat po eor,包括什么schedule threat eor等等内容,而在这个过程中,在外边还一个叫executors,这是什么呢?各位可以理解为用这个类,好比说就是一个工具类,通过它能实现咱们线程池中一些相关操作,所以这是关于线程池一个基本的一个架构。
07:21
里边通过接口和类的关系,包括里边这个ES工具类,最终实现线程池里边的相关内容。所以这个就是关于线程池的概述,包括它的一个基本的架构,各位把这个概念上的东西先给他知道。
我来说两句