进程与线程通俗理解

进程和线程两个中文词本身读起来就挺绕口的,因此为了方便区分,我给他们两个分别取了一个洋气点儿的名字:进程的英文名为:Process,线程的英文名叫做Thread。

那么Process和Thread和我们的生活有什么联系呢?

  假设我们每个人都有一个房子(想想眼里就都是泪),这个房子有一个很洋气的名字,叫做”Process“,房子里面有楼梯、卧室、厨房、卫生间等等。我们要讲的进程Process和这个房子一样,自己无法主动去干点什么的。

  但是这个房子里面居住的我们亲戚朋友和兄弟姐妹,却可以利用这个房间干很多事情,他们就是一个一个的Thread。

  如果只有你一个人住在这个房子里面,那么你就可以为所欲为,把所有的空间占为己有:用卫生间、洗澡等等,这就是“单线程”,即Single Threaded.
  你终于不甘寂寞,并且用尽浑身解数,找到了一个girl或boy与你同住,后来为了分担房租,又找来某一个好朋友一起合租,屋子里面人多了,这就是多线程,Multi Threaded。

  你们好几个Thread在一起,共用这个房间的空间(一个Process的内存空间对于Thread是共享的),相安无事,和谐共处。

  可是问题来了,大家可以共享房间的空间,但是并不表示多个人可以同时占用一个空间,比如厕所,一次只能去一个人,所以为了防止多人同时进入的情况,因此每个人上厕所的时候,都会在门口挂一个锁,名字叫“Mutual exclusion”(互斥现象),防止多个Thread同时去使用一个内存空间,只有一个Thread用完后,其他Thread才可以用。

  有些地方大家都可以去,但是空间有限,只能去固定的人数,比如厨房,去的人多了,容不下,因此会在门口挂上几把钥匙,进去一个人取一个钥匙,出来的时候再把钥匙给放在原地,所以厨房人满的时候,后面要进的人,一看没有钥匙,就会在门口等待了,这种做法叫做:Semaphore(信号联络)。

    大概先写这么多吧,想看原汁原味和更多的讲解,可以看看那篇原文,写这么点希望对大家的理解有所帮助。


线程与进程的区别归纳:

a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

c.调度和切换:线程上下文切换比进程上下文切换要快得多。

d.在多线程OS中,进程不是一个可执行的实体。

猜你喜欢

转载自blog.csdn.net/lxz978161079/article/details/80315001