한국어로 하면 동기, 비동기, 블로킹, 논 블로킹에 대해서 알아봅시다.
한 블로그의 내용을 가져오면 다음과 같다.
블럭/논블럭
- 블럭/논블럭는 함수호출에서의 이야기이다.(기술적으로 명확히 구분된다.)
- A 라는 함수를 호출했을때, A라는 함수를 호출 했을 때 기대하는 행위를 모두 끝마칠때까지 기다렸다가 리턴되면, 이것은 블로킹 되었다고 한다.
- A 라는 함수를 호출 했는데, A라는 함수를 호출 했을 때 기대하는 어떤 행위를 요청 하고 바로 리턴되면 이것은 논블럭킹 되었다고 한다.
동기/비동기
- 동기/비동기는 행위에 대한 이야기이다.(기술적으로 구분 안된다. 추상적으로 구분한다.)
- A 라는 행위와 B 라는 별개의 행위가 있다고 하자. A 라는 행위와 B 라는 행위가 동시(or 순차적이지 않다면)에 실행되고 있으면 비동기라고 한다.
여기서 제약이 하나 있는데 A,B 행위 사이에는 인과관계가 있어야 한다. 즉 웹서버를 예로 들어서 멀티쓰레드로 각각 A와B가 다른 클라이언트와 작업 할 때 둘은 동시에 작업하고 있지만,
둘의 인과관계는 없지 않나? 이땐 비동기라고 볼 수 없다.
출처: <https://hamait.tistory.com/930> [HAMA 블로그]
자바에서는 동시성 문제를 해결하기 위해서 모든 객체에 monitor를 구현하고 있습니다.
stack overflow에서는 다음과 같이 설명을 하고 있습니다.
A monitor is mechanism to control concurrent access to an object.
동시성 문제에 대해서 다음의 두가지를 고려해야하는데
When a process/thread is executing its critical section no other processes are allowed to execute their critical section. (Each process has a code segment called "Critical section" in which shared data is accessed.)
When threads are trying to achieve a common goal via working together, these threads need cooperation between them. They need to synchronize when they focus on a common goal.