当前位置: 首页 > news >正文

食品类网站设计广东圆心科技网站开发

食品类网站设计,广东圆心科技网站开发,wordpress discuz 统一账号,做全景图二维码的网站一、Java 中用到的线程调度 1. 抢占式调度#xff1a; 抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制#xff0c;系统控制指的是在系统某种运行机制下#xff0c;可能每条线程都分同样的执行时间片#xff0c;也可能是某些线程执行的时间片较长#xff0…一、Java 中用到的线程调度 1. 抢占式调度 抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制系统控制指的是在系统某种运行机制下可能每条线程都分同样的执行时间片也可能是某些线程执行的时间片较长甚至某些线程得不到执行的时间片。在这种机制下一个线程的堵塞不会导致整个进程堵塞。2. 协同式调度 协同式调度指某一线程执行完后主动通知系统切换到另一线程上执行这种模式就像接力赛一样一个人跑完自己的路程就把接力棒交接给下一个人下个人继续往下跑。线程的执行时间由线程本身控制线程切换可以预知不存在多线程同步问题但它有一个致命弱点如果一个线程编写有问题运行到一半就一直堵塞那么可能导致整个系统崩溃。3. JVM 的线程调度实现抢占式调度 java 使用的线程调使用抢占式调度Java中线程会按优先级分配CPU时间片运行且优先级越高越优先执行但优先级高并不代表能独自占用执行时间片可能是优先级高得到越多的执行时间片反之优先级低的分到的执行时间少但不会分配不到执行时间。4. 线程让出cpu的情况 1. 当前运行线程主动放弃CPUJVM暂时放弃CPU操作基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU或者说放弃本次时间片的执行权例如调用yield()方法。 2. 当前运行线程因为某些原因进入阻塞状态例如阻塞在I/O上。 3.当前运行线程结束即运行完run()方法里面的任务二、进程调度算法 1. 优先调度算法 1. 先来先服务调度算法FCFS 当在作业调度中采用该算法时每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业将它们调入内存为它们分配资源、创建进程然后放入就绪队列。在进程调度中采用FCFS 算法时则每次调度是从就绪队列中选择一个最先进入该队列的进程为之分配处理机使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机特点是算法比较简单可以实现基本上的公平。2. 短作业(进程)优先调度算法 短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程将处理机分配给它使它立即执行并一直执行到完成或发生某事件而被阻塞放弃处理机时再重新调度。该算法未照顾紧迫型作业。2. 高优先权优先调度算法 为了照顾紧迫型作业使之在进入系统后便获得优先处理引入了最高优先权优先(FPF)调度算法。当把该算法用于作业调度时系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时该算法是把处理机分配给就绪队列中优先权最高的进程。1. 非抢占式优先权算法 在这种方式下系统一旦把处理机分配给就绪队列中优先权最高的进程后该进程便一直执行下去直至完成或因发生某事件使该进程放弃处理机时。这种调度算法主要用于批处理系统中也可用于某些对实时性要求不严的实时系统中。2.抢占式优先权调度算法 在这种方式下系统同样是把处理机分配给优先权最高的进程使之执行。但在其执行期间只要又出现了另一个其优先权更高的进程进程调度程序就立即停止当前进程(原优先权最高的进程)的执行重新将处理机分配给新到的优先权最高的进程。显然这种抢占式的优先权调度算法能更好地满足紧迫作业的要求故而常用于要求比较严格的实时系统中以及对性能要求较高的批处理和分时系统中。3高响应比优先调度算法 在批处理系统中短作业优先算法是一种比较好的算法其主要的不足之处是长作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权并使作业的优先级随着等待时间的增加而以速率a 提高则长作业在等待一定的时间后必然有机会分配到处理机。该优先权的变化规律可描述为(1) 如果作业的等待时间相同则要求服务的时间愈短其优先权愈高因而该算法有利于短作业。 (2) 当要求服务的时间相同时作业的优先权决定于其等待时间等待时间愈长其优先权愈高因而它实现的是先来先服务。 (3) 对于长作业作业的优先级可以随等待时间的增加而提高当其等待时间足够长时其优先级便可升到很高从而也可获得处理机。简言之该算法既照顾了短作业又考虑了作业到达的先后次序不会使长作业长期得不到服务。因此该算法实现了一种较好的折衷。当然在利用该算法时每要进行调度之前都须先做响应比的计算这会增加系统开销。3. 基于时间片的轮转调度算法 1. 时间片轮转法 在早期的时间片轮转法中系统将所有的就绪进程按先来先服务的原则排成一个队列每次调度时把CPU 分配给队首进程并令其执行一个时间片。时间片的大小从几ms 到几百ms。当执行的时间片用完时由一个计时器发出时钟中断请求调度程序便据此信号来停止该进程的执行并将它送往就绪队列的末尾然后再把处理机分配给就绪队列中新的队首进程同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。2. 多级反馈队列调度算法 (1) 应设置多个就绪队列并为各个队列赋予不同的优先级。第一个队列的优先级最高第二个队列次之其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同在优先权愈高的队列中为每个进程所规定的执行时间片就愈小。例如第二个队列的时间片要比第一个队列的时间片长一倍……第i1个队列的时间片要比第i个队列的时间片长一倍。 (2) 当一个新进程进入内存后首先将它放入第一队列的末尾按FCFS原则排队等待调度。当轮到该进程执行时如它能在该时间片内完成便可准备撤离系统如果它在一个时间片结束时尚未完成调度程序便将该进程转入第二队列的末尾再同样地按FCFS原则等待调度执行如果它在第二队列中运行一个时间片后仍未完成再依次将它放入第三队列……如此下去当一个长作业(进程)从第一队列依次降到第n队列后在第n 队列便采取按时间片轮转的方式运行。 (3) 仅当第一队列空闲时调度程序才调度第二队列中的进程运行仅当第 1(i-1)队列均空时才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时又有新进程进入优先权较高的队列(第 1(i-1)中的任何一个队列)则此时新进程将抢占正在运行进程的处理机即由调度程序把正在运行的进程放回到第i队列的末尾把处理机分配给新到的高优先权进程。在多级反馈队列调度算法中如果规定第一个队列的时间片略大于多数人机交互所需之处理时间时便能够较好的满足各种类型用户的需要。三、CAS比较并交换-乐观锁机制-锁自旋 1. 概念及特性 CASCompare And Swap/Set比较并交换CAS 算法的过程是这样它包含 3 个参数CAS(V,E,N)。V 表示要更新的变量(内存值)E 表示预期值(旧的)N 表示新值。当且仅当 V 值等于E值时才会将V的值设为N如果V值和E值不同则说明已经有其他线程做了更新则当前线程什么都不做。最后CAS返回当前V的真实值。 CAS 操作是抱着乐观的态度进行的(乐观锁)它总是认为自己可以成功完成操作。当多个线程同时使用 CAS 操作一个变量时只有一个会胜出并成功更新其余均会失败。失败的线程不会被挂起仅是被告知失败并且允许再次尝试当然也允许失败的线程放弃操作。基于这样的原理CAS操作即使没有锁也可以发现其他线程对当前线程的干扰并进行恰当的处理。.2. 原子包 java.util.concurrent.atomic锁自旋 JDK1.5 的原子包java.util.concurrent.atomic 这个包里面提供了一组原子类。其基本的特性就是在多线程环境下当有多个线程同时执行这些类的实例包含的方法时具有排他性即当某个线程进入方法执行其中的指令时不会被其他线程打断而别的线程就像自旋锁一样一直等到该方法执行完成才由 JVM 从等待队列中选择一个另一个线程进入这只是一种逻辑上的理解。相对于对于synchronized 这种阻塞算法CAS 是非阻塞算法的一种常见实现。由于一般CPU切换时间比CPU指令集操作更加长所以J.U.C在性能上有了很大的提升。3. ABA 问题 CAS 会导致“ABA 问题”。CAS 算法实现一个重要前提需要取出内存中某时刻的数据而在下时刻比较并替换那么在这个时间差类会导致数据的变化。 比如说一个线程 one 从内存位置 V 中取出A这时候另一个线程 two 也从内存中取出 A并且two进行了一些操作变成了B然后two又将V位置的数据变成A这时候线程one进行CAS操作发现内存中仍然是A然后one操作成功。尽管线程one的CAS操作成功但是不代表这个过程就是没有问题的。 部分乐观锁的实现是通过版本号version的方式来解决ABA问题乐观锁每次在执行数据的修改操作时都会带上一个版本号一旦版本号和数据的版本号一致就可以执行修改操作并对版本号执行1 操作否则就执行失败。因为每次操作的版本号都会随之增加所以不会出现 ABA 问题因为版本号只会增加不会减少。四、AQS抽象的队列同步器 AbstractQueuedSynchronizer 类如其名抽象的队列式的同步器AQS定义了一套多线程访问共享资源的同步器框架许多同步类实现都依赖于它如常用的ReentrantLock/Semaphore/CountDownLatch。它维护了一个volatile int state代表共享资源和一个 FIFO 线程等待队列多线程争用资源被阻塞时会进入此队列。这里volatile 是核心关键词具体 volatile 的语义在此不述。state 的访问方式有三种: getState() setState() compareAndSetState() AQS定义两种资源共享方式 Exclusive 独占资源-ReentrantLock Exclusive独占只有一个线程能执行如ReentrantLock Share 共享资源-Semaphore/CountDownLatch Share共享多个线程可同时执行如Semaphore/CountDownLatch。 AQS只是一个框架具体资源的获取/释放方式交由自定义同步器去实现AQS这里只定义了一个接口具体资源的获取交由自定义同步器去实现了通过state的get/set/CAS)之所以没有定义成abstract是因为独占模式下只用实现 tryAcquire-tryRelease而共享模式下只用实现tryAcquireShared-tryReleaseShared。如果都定义成abstract那么每个模式也要去实现另一模式下的接口。不同的自定义同步器争用共享资源的方式也不同。自定义同步器在实现时只需要实现共享资源 state 的获取与释放方式即可至于具体线程等待队列的维护如获取资源失败入队/唤醒出队等AQS已经在顶层实现好了。自定义同步器实现时主要实现以下几种方法 1isHeldExclusively()该线程是否正在独占资源。只有用到condition才需要去实现它。 2tryAcquire(int)独占方式。尝试获取资源成功则返回true失败则返回false。 3tryRelease(int)独占方式。尝试释放资源成功则返回true失败则返回false。 4tryAcquireShared(int)共享方式。尝试获取资源。负数表示失败0 表示成功但没有剩余可用资源正数表示成功且有剩余资源。 5tryReleaseShared(int)共享方式。尝试释放资源如果释放后允许唤醒后续等待结点返回true否则返回false。 同步器的实现是ABS核心state资源状态计数 同步器的实现是ABS核心以ReentrantLock为例state初始化为0表示未锁定状态。A线程lock()时会调用 tryAcquire()独占该锁并将 state1。此后其他线程再 tryAcquire()时就会失败直到A线程unlock()到state0即释放锁为止其它线程才有机会获取该锁。当然释放锁之前A 线程自己是可以重复获取此锁的state 会累加这就是可重入的概念。但要注意获取多少次就要释放多么次这样才能保证state是能回到零态的。以CountDownLatch以例任务分为N个子线程去执行state也初始化为N注意N要与线程个数一致。这 N 个子线程是并行执行的每个子线程执行完后 countDown()一次state会CAS减1。等到所有子线程都执行完后(即state0)会unpark()主调用线程然后主调用线程就会从await()函数返回继续后余动作。 ReentrantReadWriteLock 实现独占和共享两种方式 一般来说自定义同步器要么是独占方法要么是共享方式他们也只需实现 tryAcquiretryRelease、tryAcquireShared-tryReleaseShared 中的一种即可。但 AQS 也支持自定义同步器同时实现独占和共享两种方式如ReentrantReadWriteLock。
http://www.hkea.cn/news/14290163/

相关文章:

  • 张掖网站建设公司wordpress xampp 本地 慢
  • 简历制作网站哪个好来广营做网站公司
  • wordpress建站什么意思甘南州城乡建设局网站
  • 网站首页快照云龙主机 wordpress
  • 上海的招聘网站有哪些强化门户网站建设
  • 贵州省城乡建设厅网站首页西宁百度推广公司电话
  • 深圳专业网站建设产品运营之中的广度讲解银川市建设厅网站
  • 中山优秀网站建设博宇娱乐网站建设
  • 做矿业的郑州公司网站做百度手机网站优化快
  • 做网站常用软件泗水县最新消息
  • 因脉网站建设公司怎么呀韩国怎么样优化关键词排名
  • 陕西省住房与城乡建设部网站婚纱制作网站
  • 网站建设策划书封面小程序开发工具编辑器
  • asp网站安装教程黄埔网站建设(信科网络)
  • dw网站开发环境wordpress建站打不开二级页面
  • 互联网站备案登记表wordpress页面模板是哪个文件
  • 阿里云公司网站制作微信公众号软文怎么写
  • 西安哪家做网站最好wordpress高级自定义字段怎么显示
  • 动漫网站建设毕业设计wordpress 更换语言包
  • 阿里云网站方案建设书内容管理系统开源
  • 网站seo搜索引擎优化案例网站 什么语言开发的
  • 网站右下角代码免费网页建设
  • 进口食品销售销售在那个网站做简述主要的电子商务网站有哪些
  • 做网站商丘汽车网站更新怎么做
  • 装潢建筑公司网站设计国家高新技术企业牌匾
  • 东莞网站推广渠道有哪些上海php做网站
  • 服务器哪些端口可以做网站动态的网页制作
  • 网站开发网页权限如何控制wordpress建网 打不开
  • 流量网站建设dw做的网站怎么放到服务器上
  • 做会计网站的流程WordPress自动采集翻译插件