| 
 | 
 
Split-Phase操作 
 
比较以下Blocking和Split-Phase操作的两段代码 
Blocking      
 
if (send() == SUCCESS) { 
  sendCount++; 
} 
在Block的系统中,当要调用一个运行时间很长的操作时,直到操作完成调用才能返回。例如,只有执行完send()才会有返回值。 
     
Split-Phase 
// start phase 
send(); 
 
//completion phase 
void sendDone(error_t err) { 
  if (err == SUCCESS) { 
    sendCount++; 
  } 
} 
在Split-Phase操作中,将程序的执行分为两个部分,开始部分和完成部分。 
Split-Phase操作的好处: 
1.节省内存,与block的操作需要stack相比,节省了内存stack的开销。 
2.可以并行运行多个操作。 
下面是另一个例子 
Blocking:      
 
state = WAITING; 
op1(); 
sleep(500); 
op2(); 
state = RUNNING 
 
在此个Block的例子中,整个程序需要进行sleep(500) 
 
Split-phase: 
 
state = WAITING; 
op1(); 
call Timer.startOneShot(500); 
 
event void Timer.fired() { 
  op2(); 
  state = RUNNING; 
} 
此Split-Phase的操作,在调用Timer.startOneShot(500)后,程序立即返回,整个程序并没有停止,过500ms后,自动调用event void Timer.fired() 
 
 |   
 
 
 
 |