|
|
51CTO旗下网站
|
|
移动端

1.6.3 饥饿与公平

《Java多线程与Socket:实战微服务框架》第1章多线程基础,本书尽量采用简要和通俗易懂的方式来介绍多线程知识。本节为大家介绍饥饿与公平。

作者:庞永华来源:电子工业出版社|2019-03-26 15:52

1.6.3 饥饿与公平

线程饥饿是指某个线程因为得不到所需要的资源,而总是或经常性地处在“就绪”(RUNNABLE)或“阻塞”(BLOCKED)状态。例如:

. 因为CPU时间被其他线程(通常是高优先级的线程)抢占而得不到执行,一直处于“就绪”状态。

. 由于线程调度的公平性问题,经常得不到唤醒,因此得不到执行机会。

. 线程被错误地唤醒后发现所需的资源不可用,又回到阻塞状态,周而复始。

为了避免出现线程饥饿,需要注意以下几点:

. 避免线程过久地占据CPU。

如果一个线程需要执行较长的时间(尤其是那些循环执行的线程),则一般需要增加sleep()、yield()等方法,让线程转为阻塞(BLOCKED)或就绪(RUNNABLE)状态,让出CPU,以便其他线程有机会执行。

. 合理地设计线程的优先级或根本就不设置。

设计不合理时,较低优先级的线程可能永远都得不到执行的机会。

. 使用公平锁等办法改善线程调度的公平性。

在竞争锁的过程中,由于线程调度的随机性,因此不可避免地出现了某些线程一直或经常性地处于阻塞状态,得不到执行的情况。这是不公平的。为了增强公平性,可以将竞争同一个锁的线程进行排队,按照先后顺序依次获得锁,获得锁的线程才能得以执行。这样一来,每个线程获取锁的过程就是相对公平的,等待时间最长的线程会***被唤醒。

. 在正确的时机唤醒线程,不能过早,也不能过晚。

过早或过晚唤醒都会导致线程运行所需要的资源没有准备好。


喜欢的朋友可以加入官方的读书群

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

高质量程序设计指南:C++/C语言(第3版)

本书以轻松幽默的笔调向读者论述了高质量软件开发方法与C++/C编程规范。它是作者多年从事软件开发工作的经验总结。本书共17章,第1章到第4...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客