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

写在前边程序员

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

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


线程与进程
编程

1、进程和线程的含义 服务器

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

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

2、举个例子ide

☛ 好比咱们手机有两个进程要进行,一个是便签,另外一个是绝地求生。线程

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

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

图解:

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

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

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

3、线程池

概念:

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

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

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

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

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

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

图解:

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

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

相关文章
相关标签/搜索