您的位置:首页 > 其它

你对进程线程到底理解有多少

2021-01-22 23:26 417 查看

写在前边

大家好,今天又来更新了,今天更新的干货在我看来很重要的。想知道为啥那么重要吗?哈哈,还有比面试找工作重要的事情吗?尤其是那些百度、网易、腾讯、头条等巨头公司问的你能怀疑人生。即使不去这些大公司面试,你去面试一些中小型公司,当然是你知道的越多越深入才能突出你的优势来啊!今天小编我看到一篇文章说的是有些程序员对以后的目标很迷茫,那我今天就不得不提醒一下了。如果现在对未来挺迷茫的,不妨把像腾讯、网易、阿里等这样的大公司为目标吧,最起码有个动力在背后推着你努力。送给你们一句话 “人往高处走,水才往低处流”。


线程与进程

一、进程和线程的含义

进程:进程是拥有资源的基本单位。

线程:线程是CPU调度的基本单位。

二、举个例子

☛ 比如我们手机有两个进程要进行,一个是便签,另一个是绝地求生。

☛ 便签进程运行要打开保存文本的文件,这里的“打开文件”我们就叫它资源;绝地求生进程要通过监听用户按键事件,这里的“监听用户按键事件”叫做它的资源。

☛ 我们都知道便签软件有自动保存的功能这个功能在t1线程中执行,用户编辑文本在t2线程中执行;绝地求生假设也有两个线程t3和t4,t3线程负责QE 歪头,t4线程负责开枪。上边我所给出的概念是『线程是CPU调度的基本单位』CPU在调度的时的基本单位不是打开便签和绝地求生两个进程,而是t1、t2、t3、t4四个线程。

图解:


★ 注意:一个进程至少要有一个线程

☛ 如果一个进程没有多线程,你玩绝地求生的时候怎么能边歪头边射击呢?单线程只能干一件事,事件不能并发进行,浪费 CPU 资源。所谓的多进程就是绝地求生运行在后台的同时,你使用便签进行文字记录。进程是一个软件在运行,线程就是执行进程中的线程代码片段。

三、线程池

概念:

① 有了多线程编程为何还要引进线程池的概念呢?

线程池对于我们开发者创建来说很简单方便,但是对服务器来说负担很沉重,每个用户请求登录软件都要开启一个线程,创建的线程就会很多,你想想那么多的线程去竞争 CUP 资源,持续切换,这个 CUP 的调度不是要累死的节奏吗?为了解决这个问题,就引进了线程池的概念,通过线程池提前创建一定数量的线程,不用等任务来了在创建,提前创建线程的作用就是当系统有任务来了之后就直接去执行任务。如果有任务来了,线程池的线程就会去执行任务,执行完后不销毁直接回到线程池等待执行下一个任务。我们所说的线程就是代码的执行,动态创建的。

② 线程的创建是通过 .start 开启的,一旦开启线程就会自动执行 run 方法。那么一个新的问题来了,任务还没来呢?提前创建一个线程之后直接执行 run 方法了。

其实线程池还有重要的一点,就是当线程池刚创建时,让其进入堵塞状态,等待系统任务的到来;如果任务来了,我们就把第一位线程同学叫醒拿着老师的任务去干活。

③ 怎么让线程池进入堵塞状态呢?

BlockingQueu 作为线程容器,可以为线程同步提供有力的保障。BlockingQueue 很容易理解,它就是一个容器,用来存放系统的任务的。线程池的线程调用它的 take() 方法取出任务进行执行,如果 BlockingQueue 没有可执行任务,该线程就会阻塞;该线程可以通过调用 put 方法放入任务,如果任务满了线程也会阻塞。

图解:

就是说在线程池中的每个 Run 方法中都要有一个循环判断 BlockingQueue 有没有可执行的任务,如果有就去执行,执行完回来再 BlockingQueue 中继续获取任务,如果 BlockingQueue 没有可执行任务了,线程就处于阻塞等待状态。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: