[F-Lab 챌린지 26일차] Blocking/Non-Blocking IO & 동기/비동기 IO

성수데브리·2023년 7월 24일
0

f-lab_java

목록 보기
22/73

Blocking & Non-blocking

  • 제어권을 누가 갖는가
  • Blocking 은 호출 당한 함수가 제어권을 갖는다.
  • Non-blocking 은 호출한 함수에서 제어권을 계속 갖고 있는다.

동기 & 비동기

  • 호출 당한 함수의 작업 완료 여부를 누가 확인하는가
  • 동기는 호출한 함수에서 확인한다.
  • 비동기는 호출 당한 함수에서 Callback 함수가 완료 여부를 확인하고 알린다.

제어권이란

  • 프로세스가 운영체제로부터 CPU 를 할당 받아 작업을 수행할 수 있는 상태를 말합니다.

Blocking & 동기 IO

  • 호출한 함수는 제어권이 없기 때문에 호출 당한 함수의 작업이 완료될 때까지 대기해야 합니다.
  • 호출당한 함수의 작업 완료 여부를 호출한 쪽에서 확인합니다.

Blocking & 비동기 IO

  • 호출한 함수는 제어권이 없기 때문에 호출 당한 함수의 작업이 완료될 때까지 대기해야 합니다.
  • 함수를 호출할 때 Callback 함수와 함께 호출하고, 호출 당한 함수의 작업 완료 여부를 Callback 함수가 알려줍니다.

Non-Blocking & 동기 IO

  • 호출한 쪽에서 제어권을 갖습니다.
  • 호출한 쪽은 제어권을 갖고 있기 때문에 다른 작업을 수행할 수 있는데, 호출 당한 함수의 작업 완료를 반복해서 확인합니다.

    EWOULDBLOCK ?
    넌블록킹 모드에서는 자원이 사용 불가능한 경우에는 블록킹 되지 않고 -1 로 발환되어 실패한다.

    • EAGAIN 이나 EWOULDBLOCK 에러가 발생. ( 리눅스에서는 두 값을 같은 값으로 명시 )
    • 기존 블록킹 모드는 시스템 에러나 연결 이상을 제외하고는 블록킹되어 대기상태가 된다.

    출처

Non-Blocking & 비동기 IO

  • 호출한 쪽에서 제어권을 갖습니다.
  • 호출한 쪽은 제어권을 갖고 있기 때문에 대기하지 않고 다른 작업을 수행합니다.
  • 호출 당한 함수의 작업 완료 여부는 Callback 함수가 확인하고 알려줍니다.

참고


java Selector is asynchronous or non-blocking architecture

동기vs비동기, 블로킹vs논블로킹? JS 더 깊게 이해하기(1)


관심사

관심사란 컴퓨터 프로그램 코드에 영향을 미치는 정보의 집합이다.

public class UserDao {

    public void add(User user) throws SQLException {
				// 1
				Connection c = DriverManager.getConnection("mySQL");
        c = DriverManager.getConnection("mySQL");
				
				// 2
        PreparedStatement ps = c.prepareStatement("insert");
        ps.setString(1, user.getId());
        ps.execute();

				// 3
        ps.close();
        c.close();
    }

}

UserDao 에는 크게 보면 3개의 관심사가 있다.

첫 번째는 DB 커넥션, 두 번째는 쿼리와 결과 받아오기 세 번째는 자원 반납이다.

관심사의 분리란

위 예시처럼 하나의 객체에 여러개의 관심사를 두지 않고
관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게하고,
관심이 다른 것은 가능한 한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것을 관심사의 분리라 한다.

하나의 관심사가 중복되어 있거나, 여기저기 흩어져 다른 관심의 대상과 얽혀 있으면,
변경이 일어나면 엄청난 고통의 원인이다.

0개의 댓글