블로킹과 논블로킹, 동기와 비동기 #14
Replies: 5 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.
-
1. 블로킹과 논블로킹, 동기와 비동기에 대해 설명해주세요.블로킹과 논블로킹은 호출된 함수가 제어권을 호출한 함수에게 반환을 언제 하느냐에 대한 이야기이고, 동기와 비동기는 호출한 함수가 호출된 함수의 결과를 어떻게 회수하느냐에 대한 이야기입니다. 블로킹은 호출된 함수가 제어권을 자신의 작업이 끝나기전까지 제어권을 반환하지 않아 호출한 스레드는 대기 상태로 전환됩니다. 동기는 호출된 함수의 종료 시점과 호출한 함수의 다음 작업 시작 시점을 정렬하여 호출한 함수가 호출된 함수의 작업 결과를 직접 회수하여 작업합니다. 여기서 대게로 '블로킹과 동기는 호출된 함수를 기다리고, 논블로킹과 비동기는 호출된 함수를 기다리지 않기 때문에 똑같은거 아니야?'라고 의문을 품곤 합니다. 그리고 (논)블로킹과 (비)동기가 조합되어 4가지 조합이 나옵니다.
|
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