状态转换用在什么当中?
一、特征:
1:动态性,2:并发性,3:独立性,4:异步性。
二、状态:
1:就绪状态 当进程已分配到除CPU以外的所有必要的资源, 只要获得处理机便可立即执行,这时的进程状态称为就绪状态。 2:执行状态 当进程已获得处理机,其程序正在处理机上执行 ,此时的进程状态称为执行状态。 3:阻塞状态 正在执行的进程,由于等待某个事件发生而无法 执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可 有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
三、三种基本状态转换:
(1) 就绪→执行 处于就绪状态的进程,当进程调度程序为之分配了处理机后, 该进程便由就绪状态转变成执行状态。 (2) 执行→就绪 处于执行状态的进程在其执行过程中,因分配给它的一个时间 片已用完而不得不让出处理机,于是进程从执行状态转变成就 绪状态。 (3) 执行→阻塞 正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。 (4) 阻塞→就绪 处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
实际情况
开关处理:
一般控制几十个几百个的小二极管的灯,效率还是比较高的。
这里用的单位是【纳秒】
状态修改次数基数是【1000】次。
1、一个开关
代码语言:javascript复制package action;
import java.util.Iterator;
import java.util.Random;
public class demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random random = new Random();
int count=1000;
long start = System.nanoTime();
for (int i = 0; i < count; i ) {
int nextInt = random.nextInt(2);
int changeState = changeState(nextInt);
System.out.print("输入:" (nextInt==0?"关":"开"));
System.out.print("-------------");
System.out.print("输出:");
System.out.println(changeState==0?"关":"开");
};
long end = System.nanoTime();
System.out.println("累计" count "的值用时:" (end-start) "纳秒");
System.out.println("累计" count "的值用时:" ((end-start)/1000000) "毫秒");
}
/**
* 修改状态
* @param state
* @return
*/
public static int changeState(int state) {
return state==0?1:0;
}
}
2、两个开关
代码语言:javascript复制package action;
import java.util.Iterator;
import java.util.Random;
public class demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random random = new Random();
int count=1000;
long start = System.nanoTime();
for (int i = 0; i < count; i ) {
int one = random.nextInt(2);
int two = random.nextInt(2);
int[] arr=changeState(new int[] {one,two});
System.out.print("输入:" (one==0?"关":"开") (two==0?"关":"开"));
System.out.print("-------------");
System.out.print("输出:");
System.out.println((arr[0]==0?"关":"开") (arr[1]==0?"关":"开"));
};
long end = System.nanoTime();
System.out.println("累计" count "的值用时:" (end-start) "纳秒");
System.out.println("累计" count "的值用时:" ((end-start)/1000000) "毫秒");
}
/**
* 修改状态
* @param state
* @return
*/
public static int[] changeState(int[] state) {
return new int[]{state[0]==0?1:0,state[1]==0?1:0};
}
}
3、多个开关
多个开关就不能写死了,得利用遍历了。
代码语言:javascript复制package action;
import java.util.Iterator;
import java.util.Random;
public class demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random random = new Random();
int count=1000;
int arrLen=5;
long start = System.nanoTime();
for (int i = 0; i < count; i ) {
int[] arr=new int[arrLen];
for (int j = 0; j < arr.length; j ) {
arr[j]=random.nextInt(2);
}
int[] arrs=changeState(arr);
System.out.print("输入:");
for (int k : arr) {
System.out.print(k==0?"关":"开");
}
System.out.println();
System.out.print("输出:");
for (int k : arrs) {
System.out.print(k==0?"关":"开");
}
System.out.println();
};
long end = System.nanoTime();
System.out.println("累计" count "的值用时:" (end-start) "纳秒");
System.out.println("累计" count "的值用时:" ((end-start)/1000000) "毫秒");
}
/**
* 修改状态
* @param state
* @return
*/
public static int[] changeState(int[] state) {
int[] arr=new int[state.length];
for (int i = 0; i < state.length; i ) {
arr[i]=state[i]==0?1:0;
}
return arr;
}
}
恭喜你,无聊的知识又增加了。