블로킹과 논블로킹, 동기와 비동기 #14
Replies: 4 comments
-
블로킹스레드가 어떤 작업을 하다가, 그 작업이 완료될 때 까지 아무것도 못하고 그 자리에 멈춰서서 대기하는 상태. 논블로킹스레드가 요청한 작업이 끝나든 말든, 일단 제어권을 바로 돌려받아 멈추지 않고 계속 작업할 수 있는 상태 블로킹은 커피를 주문하고 카운터 앞에서 커피가 나올 때 까지 하염없이 기다를 것이고, 논블로킹은 진동벨을 받고 벨이 울리면 그때 커피를 가지러 가는것. 논블로킹 방식은 스레드를 쉴틈없이 굴릴 수 있어서 더 효율적이다. 동기어떤 작업을 요청한 후 , 그 작업이 끝날 때 까지 내가 기다리거나 주기적으로 확인하여 결과물이 나오는 순간 그 결과물에 맞추어 다음 작업 실행 비동기작업을 요청하면서 콜백 함수를 넘겨주고 , 나는 나 할꺼 하러감. 작업이 끝나면 상대방이 알아서 콜백 함수를 실행해 일을 완수함. 조합동기 + 블로킹손님이 커피를 주문하고 카운터 앞에서 하염없이 기다림. 커피가 다됬으면 커피를 받고 , 손님이 직접 시럽과 컵홀더를 챙김. 동기 + 논블로킹손님이 커피를 주문하고 자리로 돌아가지만 5분마다 커피 다됬냐고 물어봄. 커피가 다됬으면 커피를 받고 , 손님이 직접 시럽과 컵홀더를 챙김. 비동기 + 논블로킹손님이 커피를 주문하고 자리로 돌아감. 커피를 주문할 때 시럽을 얼마나 넣고, 컵홀더는 무슨색을 써야할지 , 그리고 이 커피가 어디로 가야할지 다알려주고 돌아감. 돌아간 후에는 신경도 안씀. 비동기 + 블로킹커피를 주문할 때 시럽을 얼마나 넣고, 컵홀더는 무슨색을 써야할지 , 그리고 이 커피가 어디로 가야할지 다알려주고 돌아감. 그런데 돌아간 곳이 카운터 앞임. 카페사장을 못믿고 카운터 앞에 하염없이 서서 커피를 받을 준비를함. (비효율, 잘못짜인 코드) (블로킹과 논블로킹 ) vs (동기와 비동기)를 구분짓는 키워드블로킹, 논블로킹 : 스레드가 멈춰 있는가 , 계속 움직이고 있는가? 동기,비동기 : 작업이 끝났는지를 누가 확인하고 결과를 처리하는가? |
Beta Was this translation helpful? Give feedback.
-
기본 질문블로킹과 논블로킹, 동기와 비동기에 대해 설명해주세요.프로그래밍에서 블로킹과 논블로킹은 어떤 작업을 요청한 뒤, 그 작업이 끝날 때까지 현재 실행 흐름이 기다리는지를 구분하는 개념이다. 블로킹: 작업이 끝날 때까지 현재 흐름이 멈춘다. [ 블로킹 방식 ]
즉, 요청한 작업이 끝날 때까지 다음 행동으로 넘어가지 못한다. 프로그램은 일반적으로 명령어를 위에서 아래로 실행한다.
블로킹은 주로 결과를 즉시 얻을 수 없는 작업에서 발생한다.
[ 논블로킹 방식 ]
음식이 아직 완성되지 않았더라도 손님의 행동은 멈추지 않는다. 논블로킹 함수는 작업을 요청받아도, 작업이 끝날 때까지 호출자를 붙잡아 두지 않는다. 논블로킹 함수는 보통 다음 중 하나를 반환한다.
논블로킹의 핵심은 결과가 준비되지 않았다는 이유로 현재 실행 흐름을 강제로 멈추지 않는다는 것이다. 동기와 비동기는 작업을 요청한 뒤, 그 작업의 완료 결과를 어떤 방식으로 처리하는가에 관한 개념이다. 동기: 작업의 완료를 확인한 뒤 다음 흐름으로 진행한다. [ 동기 방식 ] 주문한 사람은 음료가 완성되었다는 결과를 직접 받은 뒤 다음 행동으로 넘어간다. 프로그래밍에서는 다음과 비슷하다.
즉, 앞 작업과 뒤 작업의 순서가 명확하게 연결되어 있다. [ 비동기 방식 ] 주문자는 음료가 완성될 때까지 카운터 앞에서 계속 확인하지 않는다. 프로그래밍에서는 다음과 같은 구조다. JavaScript의 setTimeout()을 보자. 코드에서는 완료 결과는 다음과 같은 방식으로 전달될 수 있다.
"작업 완료를 호출한 쪽이 직접 확인하며 흐름을 이어 가는가, 아니면 완료되었을 때 별도로 통지받는가?"
|
Beta Was this translation helpful? Give feedback.
-
블로킹과 논블로킹, 동기와 비동기에 대해 설명해주세요.제어권, 즉 함수를 실행할 수 있는 권리가 누구에게 있는지에 따라 블로킹과 논블로킹을 구별할 수 있다.
동기(Synchronous)에서 chronous는 시간을 의미하며 직역하면 '시간을 함께하다'라는 뜻을 가지고 있다. 이 '시간'을 어떻게 정의하냐에 따라 사람마다 '동기'에 대한 다양한 관점이 존재한다. 그 중 가장 보편적이고 이해하기 쉬운 시간에 대한 개념을 가지고 동기를 정의할 것이다.
결과적으로 기다리고 안 기다리고 만 봤을 때는 동기== 블로킹이고 비동기 == 논블로킹이라고 판단할 수 있다. 하지만 '제어권'으로 블로킹/논블로킹을 구별할 수 있고, '시간'으로 동기/비동기를 구별한다. 즉, 흐름은 거의 동일하지만, 관점에 따라 다른 개념으로 존재한다. 동기/비동기와 블로킹/논블로킹이 조합되어 4가지 방식으로 존재하는데,
|
Beta Was this translation helpful? Give feedback.
-
블로킹과 논블로킹, 동기와 비동기에 대해 설명해주세요.블로킹/논블로킹→ 하나의 작업이 완료될때까지 작업 실행 흐름을 멈추고 대기하는 방식을 블로킹이라고 합니다
→ 요청을 보내고 작업이 끝나지 않아도 기다리지 않고 다음으로 넘어가는 방식을 논블로킹이라고 합니다 이에 대한 결과는 나중에 확인하거나 이벤트, 콜백으로 받아옵니다.
동기와 비동기→ 동기는 작업 완료 여부를 확인하고 다음 작업을 수행합니다
→ 비동기는 작업 완료 여부를 기다리지 않고 다음 작업을 수행합니다
비슷하게 보이지만 동기와 블로킹, 비동기와 논블로킹은 독립적인 개념입니다 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
📆 일자: 26년 7월 15일(수)
기본 질문
블로킹과 논블로킹, 동기와 비동기에 대해 설명해주세요.
학습 자료
백엔드 개발자들이 알아야할 동시성 2 — 블로킹과 논블로킹, 동기와 비동기
Beta Was this translation helpful? Give feedback.
All reactions