国外创意摄影网站品牌网站开发策划书

web/2025/9/30 19:27:08/文章来源:
国外创意摄影网站,品牌网站开发策划书,网络传奇,申请网站网站以下内容转自http://ifeve.com/starvation-and-fairness/#xff1a; 如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间#xff0c;这种状态被称之为“饥饿”。而该线程被“饥饿致死”正是因为它得不到CPU运行时间的机会。解决饥饿的方案被称之为“公平性”–即…以下内容转自http://ifeve.com/starvation-and-fairness/ 如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间这种状态被称之为“饥饿”。而该线程被“饥饿致死”正是因为它得不到CPU运行时间的机会。解决饥饿的方案被称之为“公平性”–即所有线程均能公平地获得运行机会。  下面是本文讨论的主题 1. Java中导致饥饿的原因 高优先级线程吞噬所有的低优先级线程的CPU时间。线程被永久堵塞在一个等待进入同步块的状态。线程在等待一个本身也处于永久等待完成的对象比如调用这个对象的wait方法。2. 在Java中实现公平性方案需要: 使用锁而不是同步块。公平锁。注意性能方面。Java中导致饥饿的原因 在Java中下面三个常见的原因会导致线程饥饿 高优先级线程吞噬所有的低优先级线程的CPU时间。线程被永久堵塞在一个等待进入同步块的状态因为其他线程总是能在它之前持续地对该同步块进行访问。线程在等待一个本身在其上调用wait()也处于永久等待完成的对象因为其他线程总是被持续地获得唤醒。高优先级线程吞噬所有的低优先级线程的CPU时间 你能为每个线程设置独自的线程优先级优先级越高的线程获得的CPU时间越多线程优先级值设置在1到10之间而这些优先级值所表示行为的准确解释则依赖于你的应用运行平台。对大多数应用来说你最好是不要改变其优先级值。 线程被永久堵塞在一个等待进入同步块的状态 Java的同步代码区也是一个导致饥饿的因素。Java的同步代码区对哪个线程允许进入的次序没有任何保障。这就意味着理论上存在一个试图进入该同步区的线程处于被永久堵塞的风险因为其他线程总是能持续地先于它获得访问这即是“饥饿”问题而一个线程被“饥饿致死”正是因为它得不到CPU运行时间的机会。 线程在等待一个本身在其上调用wait()也处于永久等待完成的对象 如果多个线程处在wait()方法执行上而对其调用notify()不会保证哪一个线程会获得唤醒任何线程都有可能处于继续等待的状态。因此存在这样一个风险一个等待线程从来得不到唤醒因为其他等待线程总是能被获得唤醒。 在Java中实现公平性 虽Java不可能实现100%的公平性我们依然可以通过同步结构在线程间实现公平性的提高。 首先来学习一段简单的同步态代码 public class Synchronizer{public synchronized void doSynchronized(){//do a lot of work which takes a long time } } 如果有一个以上的线程调用doSynchronized()方法在第一个获得访问的线程未完成前其他线程将一直处于阻塞状态而且在这种多线程被阻塞的场景下接下来将是哪个线程获得访问是没有保障的。 使用锁方式替代同步块 为了提高等待线程的公平性我们使用锁方式来替代同步块。 public class Synchronizer{Lock lock new Lock();public void doSynchronized() throws InterruptedException{this.lock.lock();//critical section, do a lot of work which takes a long timethis.lock.unlock();} } 注意到doSynchronized()不再声明为synchronized而是用lock.lock()和lock.unlock()来替代。 下面是用Lock类做的一个实现 public class Lock {private boolean isLocked false;private Thread lockingThread null;public synchronized void lock() throws InterruptedException {while (isLocked) {wait();}isLocked true;lockingThread Thread.currentThread();}public synchronized void unlock() {if (this.lockingThread ! Thread.currentThread()) {throw new IllegalMonitorStateException(Calling thread has not locked this lock);}isLocked false;lockingThread null;notify();} } 注意到上面对Lock的实现如果存在多线程并发访问lock()这些线程将阻塞在对lock()方法的访问上。另外如果锁已经锁上校对注这里指的是isLocked等于true时这些线程将阻塞在while(isLocked)循环的wait()调用里面。要记住的是当线程正在等待进入lock() 时可以调用wait()释放其锁实例对应的同步锁使得其他多个线程可以进入lock()方法并调用wait()方法。 这回看下doSynchronized()你会注意到在lock()和unlock()之间的注释在这两个调用之间的代码将运行很长一段时间。进一步设想这段代码将长时间运行和进入lock()并调用wait()来比较的话。这意味着大部分时间用在等待进入锁和进入临界区的过程是用在wait()的等待中而不是被阻塞在试图进入lock()方法中。 在早些时候提到过同步块不会对等待进入的多个线程谁能获得访问做任何保障同样当调用notify()时wait()也不会做保障一定能唤醒线程至于为什么请看线程通信。因此这个版本的Lock类和doSynchronized()那个版本就保障公平性而言没有任何区别。 但我们能改变这种情况。当前的Lock类版本调用自己的wait()方法如果每个线程在不同的对象上调用wait()那么只有一个线程会在该对象上调用wait()Lock类可以决定哪个对象能对其调用notify()因此能做到有效的选择唤醒哪个线程。 公平锁 下面来讲述将上面Lock类转变为公平锁FairLock。你会注意到新的实现和之前的Lock类中的同步和wait()/notify()稍有不同。 准确地说如何从之前的Lock类做到公平锁的设计是一个渐进设计的过程每一步都是在解决上一步的问题而前进的Nested Monitor Lockout, Slipped Conditions和Missed Signals。这些本身的讨论虽已超出本文的范围但其中每一步的内容都将会专题进行讨论。重要的是每一个调用lock()的线程都会进入一个队列当解锁后只有队列里的第一个线程被允许锁住Farlock实例所有其它的线程都将处于等待状态直到他们处于队列头部。 public class FairLock {private boolean isLocked false;private Thread lockingThread null;private ListQueueObject waitingThreads new ArrayListQueueObject();public void lock() throws InterruptedException {QueueObject queueObject new QueueObject();boolean isLockedForThisThread true;synchronized (this) {waitingThreads.add(queueObject);}while (isLockedForThisThread) {synchronized (this) {isLockedForThisThread isLocked || waitingThreads.get(0) ! queueObject;if (!isLockedForThisThread) {isLocked true;waitingThreads.remove(queueObject);lockingThread Thread.currentThread();return;}}try {queueObject.doWait();} catch (InterruptedException e) {synchronized (this) {waitingThreads.remove(queueObject);}throw e;}}}public synchronized void unlock() {if (this.lockingThread ! Thread.currentThread()) {throw new IllegalMonitorStateException(Calling thread has not locked this lock);}isLocked false;lockingThread null;if (waitingThreads.size() 0) {waitingThreads.get(0).doNotify();}} }public class QueueObject {private boolean isNotified false;public synchronized void doWait() throws InterruptedException {while (!isNotified) {this.wait();}this.isNotified false;}public synchronized void doNotify() {this.isNotified true;this.notify();}public boolean equals(Object o) {return this o;}} 首先注意到lock()方法不在声明为synchronized取而代之的是对必需同步的代码在synchronized中进行嵌套。 FairLock新创建了一个QueueObject的实例并对每个调用lock()的线程进行入队列。调用unlock()的线程将从队列头部获取QueueObject并对其调用doNotify()以唤醒在该对象上等待的线程。通过这种方式在同一时间仅有一个等待线程获得唤醒而不是所有的等待线程。这也是实现FairLock公平性的核心所在。 请注意在同一个同步块中锁状态依然被检查和设置以避免出现滑漏条件。 还需注意到QueueObject实际是一个semaphore。doWait()和doNotify()方法在QueueObject中保存着信号。这样做以避免一个线程在调用queueObject.doWait()之前被另一个调用unlock()并随之调用queueObject.doNotify()的线程重入从而导致信号丢失。queueObject.doWait()调用放置在synchronized(this)块之外以避免被monitor嵌套锁死所以另外的线程可以解锁只要当没有线程在lock方法的synchronized(this)块中执行即可。 最后注意到queueObject.doWait()在try – catch块中是怎样调用的。在InterruptedException抛出的情况下线程得以离开lock()并需让它从队列中移除。 性能考虑 如果比较Lock和FairLock类你会注意到在FairLock类中lock()和unlock()还有更多需要深入的地方。这些额外的代码会导致FairLock的同步机制实现比Lock要稍微慢些。究竟存在多少影响还依赖于应用在FairLock临界区执行的时长。执行时长越大FairLock带来的负担影响就越小当然这也和代码执行的频繁度相关。转载于:https://www.cnblogs.com/EasonJim/p/7026895.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站的后台在哪儿西安网络推广网站优化

俚语加密是一种古老而有效的通信方式,将特定词语或短语在群体内赋予特殊含义,从而隐藏真实信息。类似于方言,它在历史上的应用不可忽视。随着计算机时代的到来,现代密码学通过数学运算编织密语,使得加密变得更加高深莫…

珠海移动网站建设公司排名pagespeed WordPress

文章目录 一、flink 流式读取文件夹、文件二、flink 写入文件系统——StreamFileSink三、查看完整代码 一、flink 流式读取文件夹、文件 Apache Flink针对文件系统实现了一个可重置的source连接器,将文件看作流来读取数据。如下面的例子所示: StreamExe…

深圳仿站定制模板建站建设网站的基本工作流程

思路: 1、定义一个空列表来存储所有的奇数 2、判断是奇数就追加到列表的末尾 3、打印所有的奇数 代码如下: list [ ] #定义一个列表来存储所有的奇数 for i in range (1,100):if i % 2 ! 0: #判断是否为奇数list.append(i) #追加到列表的末尾 prin…

个人博客网站设计的目的用wordpress修改现有网页

游戏AI:大模型在游戏内容生成与交互体验优化中的应用 1. 背景介绍 随着人工智能技术的不断发展,游戏AI已经从简单的决策树和有限状态机,发展到了基于机器学习和深度学习的复杂系统。大模型,如GPT-3等,在游戏内容生成…

博客网站设计及说明单位网站建设的请示

Zeng Q, Chen B, Zhang S, et al. Full-scale ab initio simulations of laser-driven atomistic dynamics[J]. npj Computational Materials, 2023, 9(1): 213.核心研究内容: 本文研究了激光驱动的原子动力学的全尺度从头算模拟。研究的重点是探讨在极端条件下材料…

网站技术的解决方案网站 蓝色

**单片机设计介绍, 基于单片机体温心率检测仪系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机体温心率检测仪系统设计是一个综合性的项目,旨在通过单片机及其外围电路实现对人体体温和心…

网站建设模块需求分析wordpress游客登录可见

Java中synchronized的使用实例synchronized关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、D等)正在用这个方法,若有则要等正在使用synchronized方法的线…

微信的微网站模板论坛网站模板免费下载

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

济南 制作网站 公司Linux主机设置网站首页

本文主要阐述HDFSRPC安全认证相关的实现。主要介绍Token相关的实现。 写在前面 相关blog https://blog.csdn.net/hncscwc/article/details/124722784 https://blog.csdn.net/hncscwc/article/details/124958357 Token由来 在探究完Kerberos,我一直在想一个问题…

淘宝网站建设的策划书做阀门网站电话

一、虚拟地址转换成物理地址 涉及到的部件: MMU:虚拟地址—MMU—>物理地址。MMU会控制整个流程(查快表、查慢表等等)TLB快表:组号(若为组相联TLB)、TLB标记、有效位、页框号页表&#xff08…

网站建设 网站开发 区别做网站开发需要什么技能

2019独角兽企业重金招聘Python工程师标准>>> 欢迎关注我的公众号“彤哥读源码”,查看更多源码系列文章, 与彤哥一起畅游源码的海洋。 删除元素 删除元素本身比较简单,就是采用二叉树的删除规则。 (1)如果删除的位置有两…

小企业网站 优帮云网站的设计与制作

目录 一、概述 二、持续集成的典型操作流程 2.1 概述 2.2 持续集成的操作流程图 2.3 持续集成关键流程说明 三、构建持续集成流水线的方式 3.1 依托云厂商能力 3.2 采用开源产品 3.3 企业自研 四、构建持续化集成流水线 4.1 基于GitHub的持续集成流水线(公…

江苏鑫圣建设工程有限公司网站营销公司排行

变量命名的规范,对于我们编程,大家都知道是非常重要的,上次给大家推荐过一个命名辅助工具《程序员还在为变量取名苦恼,那是因为你不知道,这个变量命名神器》,但大家一致反馈存在2个问题:1、网速…

台州网站平面设计做网站哪些方面会侵权

之前使用 html2canvas 和 jsPDF 实现html转pdf,但是客户说不能复制pdf中的文字,要改一下,先说不能复制的方法,再说可以复制的方法 一,html2canvas 和 jsPDF(图片插入pdf不可复制) 创建pdf.js文…

如何快速找到做网站的客户河北石家庄网络公司

目录 1.1 三张报表的作用 1.2 三张报表长的样子 1.2.1 资产负债表 1.2.2 利润表 1.2.3 现金流 1.3 BI指标构建 1.3.1 盈利能力指标构建 1.3.2 营运能力指标构建 1.3.3 偿债能力指标构建 转眼间,一年又悄然而逝,时光荏苒,岁月如梭 &a…

各类大型网站建设变身变装 wordpress

假如按工业交换机的端口号构造来分,工业交换机大概可分成:固定不动端口号工业交换机和模块化设计工业交换机二种不一样的构造。实际上也有一种是二者兼具,那便是在出示基础固定不动端口号的基本以上再配置一定的拓展扩展槽或控制模块。今天&a…

wordpress网站搬迁黄浦做网站

目录 1、简介 2、添加WS配置 3、发送请求 4、处理请求 5、常用模式和用例 6、自定义BodyReadables和BodyWritables 6、独立WS 7、访问AsyncHttpClient 8、配置WS 1、简介 有时我们想从一个play应用程序中调用其他HTTP服务。Play提供了WS库来进行异步HTTP方法调用。 …

上虞网站建设文广网络域名买卖网站

基本的XML Schema的使用就是这样,下面我们要介绍XML Schema的另外一个核心的部分也是Schema最关键的一个部分,就是关于Schema的名字空间(namespace)的问题。在上面关于XML Schema的介绍中,为了把读者集中到对XML Schema的语法理解上&#xff…

网站与网页的区别最新网站架构

小编杂谈新能源已经完成了至少5期的博文了,Boss告诉小编,如果还不介绍我们的产品和方案,黄花菜都凉了,所以小编这期博文就重点介绍一下Microchip在储能上的产品介绍,重点聊聊Microchip储能中使用的光伏逆变器的解决方案…

国外创意海报设计网站seo 网站标题长度

struts2 1-1:为什么每次请求都要创建一个Action对象? 是出于对线程安全的考虑,每个request都不会相互影响 1-2:ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题? 先把旧的model对象从ValueStack…