[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개의 댓글

관련 채용 정보