河源市seo网站设计,功能多的网站模板 中文内容,三亚建设局网站,ui设计培训一般多少钱线程调度指的是系统为线程分配CPU使用权的方式。主要有协同式线程调度和抢占式线程调度。
协同式线程调度#xff08;Cooperative Threads-Scheduling#xff09;
在多线程系统中#xff0c;线程的执行时间由线程自身控制#xff0c;执行结束后要主动通知系统切换到另一线…线程调度指的是系统为线程分配CPU使用权的方式。主要有协同式线程调度和抢占式线程调度。
协同式线程调度Cooperative Threads-Scheduling
在多线程系统中线程的执行时间由线程自身控制执行结束后要主动通知系统切换到另一线程。
优劣势
实现简单由于线程执行结束后才会进行线程转换切换操作对线程可见所以不存在线程同步问题线程执行时间不可控如果一个线程实现有问题一直不通知系统进行线程切换那整个系统就会阻塞
抢占式线程调度Preemptive Threads-Scheduling
在多线程系统中每个线程由系统来分配执行时间线程的切换不由线程本身控制Java的Thread.yield()可以让出执行时间但是无法主动获取执行时间
优劣势
线程的执行时间是可控的不会由于一个线程导致整个进程阻塞Java采用的是这种调度方式进程不能控制自身的执行系统会进行时间片的切分会涉及到上下文的保存线程同步等问题实现较复杂
JVM的实现
JVM规范中规定每个线程都有优先级且优先级越高越优先执行但优先级高并不代表能独自占用执行时间片可能是优先级高得到越多的执行时间片反之优先级低的分到的执行时间少但不会分配不到执行时间。
java使用的线程调度式抢占式调度
Java中线程会按优先级分配CPU时间片运行
线程让出cpu的情况
当前运行线程主动放弃CPUJVM暂时放弃CPU操作如调用yield()方法当前运行线程因为某些原因进入阻塞状态例如阻塞在I/O上线程结束Dead