한국어로 하면 동기, 비동기, 블로킹, 논 블로킹에 대해서 알아봅시다.

한 블로그의 내용을 가져오면 다음과 같다.

블럭/논블럭 

- 블럭/논블럭는 함수호출에서의 이야기이다.(기술적으로 명확히 구분된다.) 
- A 라는 함수를 호출했을때, A라는 함수를 호출 했을 때 기대하는 행위를 모두 끝마칠때까지 기다렸다가 리턴되면, 이것은 블로킹 되었다고 한다.
- A 라는 함수를 호출 했는데, A라는 함수를 호출 했을 때 기대하는 어떤 행위를  요청 하고 바로 리턴되면 이것은 논블럭킹 되었다고 한다.

동기/비동기

- 동기/비동기는 행위에 대한 이야기이다.(기술적으로 구분 안된다. 추상적으로 구분한다.) 
- A 라는 행위와 B 라는 별개의 행위가 있다고 하자. A 라는 행위와 B 라는 행위가 동시(or 순차적이지 않다면)에 실행되고 있으면 비동기라고 한다. 
여기서 제약이 하나 있는데 A,B 행위 사이에는 인과관계가 있어야 한다. 즉 웹서버를 예로 들어서 멀티쓰레드로 각각 A와B가 다른 클라이언트와 작업 할 때 둘은 동시에 작업하고 있지만, 
둘의 인과관계는 없지 않나? 이땐 비동기라고 볼 수 없다. 

출처: <https://hamait.tistory.com/930> [HAMA 블로그]
  1. 모니터란 ?

자바에서는 동시성 문제를 해결하기 위해서 모든 객체에 monitor를 구현하고 있습니다.

stack overflow에서는 다음과 같이 설명을 하고 있습니다.

A monitor is mechanism to control concurrent access to an object.

동시성 문제에 대해서 다음의 두가지를 고려해야하는데

  1. Mutual exclusion

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.)

  1. Synchronisation

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.