Blocking vs None Blocking vs Sync vs ASync

2021-05-12
  • async
  • 내맘대로 이해한 blocking vs none blocking vs sync vs async
    뭔가 좀 석연찮지만, 조금 더 이해가 된 것 같다.

    Blocking - Sync

    let user = blockingSelectUserFromDatabase(); //데이터베이스에서 데이터를 가져올 떄까지 return 되지 않는다. cpu 도 기다린다. -> blocking
    
    if(user.isDeleted()) { //데이터를 가져올 때까지 기다린 다음 바로 연관된 작업을 한다 -> sync
      deleteUserAction();
    }
    
    return user;
    

    Blocking - Async

    let user = await blockingSelectUserFromDatabase(); //데이터베이스에서 데이터를 가져올 떄까지 return 되지 않지만, cpu 는 다른 작업을 수행한다. -> blocking, async
    
    if(user.isDeleted()) { //데이터를 가져올 때까지 기다린 다음 바로 연관된 작업을 한다 -> sync ... ?
      deleteUserAction();
    }
    
    return user;
    

    None Blocking - Sync

    let futureUser = noneblockingSelectUserFromDatabase(); //데이터베이스에서 데이터를 가져오든말든 return 된다. -> none blocking
    
    while(!futureUser.isDone()) {
      doSomethingOther(); //데이터베이스에서 데이터를 가져올때 까지, 딴짓을 한다. -> none blocking
    }
    
    if(futureUser.isDeleted()) { //데이터를 가져올 때까지 기다린 다음 바로 연관된 작업을 한다 -> sync
      deleteUserAction();
    }
    
    return user;
    

    None Blocking - Async

    let futureUser = noneblockingSelectUserFromDatabase(); //데이터베이스에서 데이터를 가져오든말든 return 된다. -> none blocking
    
    futerUser.then((user) => { //return 된 객체에서 callback 함수 등록 -> async
      if(user.isDeleted()) {
        deleteUserAction();
      }
    });
    
    //연관된 작업을 하지 않는다. -> async
    
    return futerUser;