理解进程process与线程thread

分类:开发相关    发布时间:2018-01-31 11:35:54

进程好像是一座房子,房里面卧室、厨房、卫生间等等。

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

如只有你一个人住在房子里面,那么你就可以为所欲为,把所有的空间占为己有:用卫生间、洗澡等等,这就是“单线程”,即Single Threaded.

你终于不甘寂寞,屋子里面人多了,这就是多线程,Multi Threaded

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

 

可是问题来了,大家可以共享房间的空间,但是并不表示多个人可以同时占用一个空间,比如厕所,一次只能去一个人,所以为了防止多人同时进入的情况,

因此每个人上厕所的时候,都会在门口挂一个锁,名字叫“Mutual exclusion”(互斥锁),防止多个Thread同时去使用一个内存空间,等候的Thread进入阻塞状态,只有一个Thread用完后(释放锁),其他Thread才可以用。

 

有些地方大家都能去,但空间有限,只能去固定的人数,比如厨房,去的人多了,容不下,因此会在门口挂上几把钥匙,进去一个人取一个钥匙,

出来的时候再把钥匙给放在原地,所以厨房人满的时候,后面要进的人,一看没有钥匙,就会在门口等待了(进入阻塞状态),这种做法叫做:Semaphore(信号量)。

 

 

进程是操作系统分配资源的单位,一个进程就是一个程序,一个进程至少包含一个线程。

 

线程由CPU调度,优先级高的线程将优先执行,一个线程的优先级设置遵从以下原则:

线程创建时,子继承父的优先级。

线程创建后,可通过调用setPriority()方法改变优先级。

线程的优先级是1-10之间的正整数。

  1- MIN_PRIORITY

  10-MAX_PRIORITY

  5-NORM_PRIORITY

如果什么都没有设置,默认值是5

但是不能依靠线程的优先级来决定线程的执行顺序。

 

线程的调度策略

线程调度器选择优先级最高的线程运行。但是,如果发生以下情况,就会终止线程的运行:

  线程体中调用了yield()方法,让出了对CPU的占用权。

  线程体中调用了sleep()方法,使线程进入睡眠状态。

  线程由于I/O操作而受阻塞。

  另一个更高优先级的线程出现。

在支持时间片的系统中,该线程的时间片用完。

 

线程的状态及生命周期


标签: process thread 进程 线程

阅读(134)┆ 评论(0) ┆ (0) ┆ 返回博客首页


发表我的评论

欢迎您: | 退出登录


文章评论