동기/비동기, 블록/논블록은 공부를 했다가도 돌아서면 생각이 안나고, 알 것 같다가도 막상 생각하면 설명하기 모호한 개념인 것 같다. 정리하고 또 다시 언젠가 가물가물해질 것 같지만 그래도 나의 언어로 적어두면 나중에 도움이 되지 않을까 해서 간단하게 적고자 한다.
synchronous
happening, existing, or arising at precisely the same time
asynchronous
not simultaneous or concurrent in time
요새 모르는 단어가 있으면 사전에서 뜻을 찾아보는 것이 굉장히 많이 도움이 되는 것 같다. 개발의 도큐먼트 같은 느낌이다. 그래서 동기/비동기도 뜻을 찾아보았다. 더 헷갈린다 가장 핵심은 "동시에" 어떠한 일이 일어날 수 있는지 아닌지에 대한 것이다. 여기에서 어떠한 일이란 작업의 맺음과 시작을 말한다. 어떠한 작업이 끝나는 동시에 다른 작업이 시작하는 일이 일어난다면 그것은 동기 작업이다.
즉, 어떠한 작업(A)을 수행시키고 해당 작업(A)이 끝난 결과 값을 받아서 본래 작업(B)이 건네받는 이 순간을 동시에 일어난다고 정의한 것 같다. 좀 더 직관적으로, 본래 작업(B)이 수행시킨 작업(A)의 결과 값을 통해 작업을 하는가 아닌가를 생각하면 된다.
동기
수행시킨 작업이 종료되며, 이 결과 값으로 인해 본래 작업에서 추가적인 작업을 수행해야 함
비동기
수행시킨 작업이 종료되며, 이 결과 값과 본래 작업의 수행은 무관함
block
to stop something from happening or succeeding
블로킹은 오히려 더 쉬운 개념이였는데, 모두들 알고 있듯이 block은 어떠한 일을 막는다는 개념이다. 그렇다면 블로킹이란 다른 작업을 수행한 후 종료될 때까지 수행을 막는다는 뜻이다.
블로킹
다른 작업을 수행시키고 종료까지 본래 작업의 수행을 막음
논블로킹
다른 작업을 수행시키고 종료까지 본래 작업의 수행을 막지 않음
이렇게 서술하고 보니 다른 분들이 쓰신 글도 이해가 가고, 좀 더 정리하기 쉬웠다! (물론 내 언어로 적은 것이기 때문에 좀 더 다듬어야 할 필요가 있는 것 같다. 틈틈히 이해가 안될때마다 다시 읽으면서 고쳐야겠다.)
동기 - 블로킹
다른 작업을 수행 시키고 종료될 때까지 본래 작업이 중지됨. 수행시킨 작업이 종료되면 본래 작업은 결과 값에 따른 추가적인 작업을 수행함
e.g. 함수를 수행하고 해당 함수의 결과 값으로 작업을 처리함
동기 - 논블로킹
다른 작업을 수행시키고 본래 작업도 수행함. 수행시킨 작업이 종료되면 본래 작업은 결과 값에 따른 추가적인 작업을 수행함
e.g. polling
비동기 - 블로킹
다른 작업을 수행시키고 종료될 때까지 본래 작업이 중지됨. 수행시킨 작업의 결과 값은 본래 작업에 영향을 주지 않음.
e.g. I/O multiplexing
비동기 - 논블로킹
다른 작업을 수행시키고 본래 작업도 수행함. 수행시킨 작업의 결과 값은 본래 작업에 영향을 주지 않음.
e.g. 대규모 사용자에게 푸시 메세지 전송
참조
https://www.merriam-webster.com/dictionary/synchronous
https://dictionary.cambridge.org/ko/%EC%82%AC%EC%A0%84/%EC%98%81%EC%96%B4/block
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC
https://deveric.tistory.com/99
https://evan-moon.github.io/2019/09/19/sync-async-blocking-non-blocking/ https://developer.ibm.com/articles/l-async/
'CS' 카테고리의 다른 글
신입 개발자 면접 스터디 - DB (0) | 2021.06.10 |
---|---|
신입 개발자 면접 스터디 - OS (0) | 2021.06.07 |
신입 개발자 면접 스터디 - 자바 (0) | 2021.05.31 |