在上学的时候,老师讲到进程与线程的时候多是这样讲的:vue
那个时候为了考试我都背下来了,可是内心想说:what?这都是些什么东西? 下面让我来试着用更通俗的语言来给你说说进程、线程、互斥锁、信号量的那些事。算法
咱们能够将本身平时住的房子类比为一个进程,每个房间及其占用者比喻为一个线程。房子自己并不会作任何的事情,可是线程是房子里面每个活跃的人,他们平时洗衣、作饭、看电视……,就像线程执行本身的代码同样在运行着。spring
单线程
单线程就是一个叫作“进程”的房子里面,只住了你一我的,你能够在这个房子里面任什么时候间去作任何的事情。你是看电视、仍是玩电脑,全都有你本身说的算。想干什么干什么,想什么时间作什么就什么时间作什么。编程
多线程
可是若是你处在一个“多人”的房子里面,每一个房子里面都有叫作“线程”的住户:线程一、线程二、线程三、线程4,状况就不得不发生变化了。假如这些线程是你的老婆、孩子、父母。后端
多线程出现这些问题的根本缘由在于”共享资源“:时间、电视、厕所、厨房……等等。那咱们下面来看看,如何处理协调使用这些"共享资源"?springboot
在多线程编程中有”锁”的概念,在你的房子里面也有锁。若是你的老婆在上厕所并锁上门,她就是在独享这个“房子(进程)”里面的公共资源“卫生间”,若是你的家里只有这一个卫生间,你做为另一个线程就只能先等待。多线程
线程对锁的占用是有优先级的,就像在你的家里也有优先级。当你家只有一个卫生间的时候,孩子、老婆、你同时要去上厕所,一般来讲 你的优先级是1,你老婆的优先级是100,你孩子的优先级是255。须要说明的是:数值越小优先级越低。可是不一样的状况下会有不一样的优先级调度算法,关键核心因子是优先级设置与等待时间,若是你确实等待了很长时间,老婆孩子可能看你快憋不住了,让你先去使用洗手间也是能够的。前后端分离
如今让咱们从卫生间走入厨房,首先咱们要明确的一点是:厨房里面能够有一我的,也能够有多我的。
那咱们怎么控制使用“厨房”这个公共资源的人数(线程数)?一个比较好的方法就是使用信号量。微服务
“信号量”在编程术语中使用单词semaphore,那什么是“信号量”?信号量就比如你家厨房入口架子上摆了三把锅:spa
因此说:当信号量总数为1的时候,也就是你家只有一把锅,此时信号量做用就等同于互斥锁。
来一张专业点的图,别让您误会我是讲故事的。讲技术,我但是认真的!
以为对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创做动力! 。另外,笔者最近一段时间输出了以下的精品内容,期待您的关注。