Linux의 5가지 IO 모델에 대해 이야기하는 블로그 게시물을 추천합니다. 글이 매우 잘 쓰여 있습니다. 이 내용을 간략하게 말씀드리겠습니다. 우선 동기화에만 소위 차단과 비차단이 있고 비동기에는 없습니다. 일반적인 오해는 비동기가 비차단을 의미한다고 생각하는 것인데, 이는 사실이 아닙니다. 여기서 동기화와 비동기성의 차이점은 네트워크 IO 또는 디스크 IO의 "전체 프로세스"에 차단이 있는지 여부가 전체 프로세스라는 것입니다. 읽기 시스템 호출을 예로 들어 보겠습니다. 사용자 스레드로서 읽기 시스템 호출을 시작하면 두 가지 작업으로 나눌 수 있습니다.
첫 번째는 데이터 읽기입니다. 디스크에서 커널 공간으로 데이터를 읽는 것입니다. 읽기는 시스템 호출이고 사용자 수준 스레드는 이를 처리하기 위해 커널 스레드로만 전달할 수 있다는 것을 알고 있습니다. 스레드는 먼저 데이터를 찾아 커널 공간으로 읽어야 합니다.
두 번째는 데이터 복사입니다: 커널 공간에서 사용자 공간으로 데이터를 읽어옵니다. 그러면 사용자 스레드가 이 데이터를 사용할 수 있습니다.
간단히 말하면
동기화는 위의 두 프로세스가 차단되었으며 사용자 스레드가 기다리고 있음을 의미합니다.
논 블로킹이란 위의 첫 번째 프로세스를 차단하지 않는 것을 의미하지만, 사용자 스레드는 디스크에서 내부 공간으로 데이터가 복사되었는지 OS에 지속적으로 물어봐야 하며 복사가 완료되면 차단됩니다. 데이터 복사 프로세스. 따라서 두 번째 단계에서는 모든 동기화 프로세스가 차단되지만 이는 비차단 호출입니다.
멀티플렉싱: non-blocking과 마찬가지로 두 번째 단계에서도 차단되지만 첫 번째 단계에서는 더 이상 운영 체제에 직접 묻지 않고 처리를 위해 균일하게 커널 스레드에 넘겨집니다(폴링은 Linux에서 구현됨) 및 향상된 epoll 버전) 데이터 읽기가 완료되면 이 스레드는 원래 시스템 호출을 시작한 사용자 스레드에 신호를 보낸 다음 사용자 스레드가 차단에 들어가 데이터 복사를 시작합니다.
동기화와 비동기화의 개념은 주로 IO 측면을 설명합니다. 간단히 말해서, 동기화와 비동기의 주요 차이점은 호출 프로세스 또는 스레드에 알리는 방법입니다. 즉시 반환 알림은 동기식인 반면, 등록된 콜백을 통한 알림은 비동기식입니다. 차단 및 비차단은 주로 함수 호출의 반환 상황을 설명합니다. 즉시 반환되는 함수는 비차단 함수이고 일시 중지된 함수는 차단 함수입니다.
간단히 비유하자면 식당에 가서 음식을 주문하는 경우입니다.
동기 차단
주문점원에게 대만우육면을 먹고 싶다고 말하면 주문점원이 주방으로 가서 잠시 시간을 내서 가져다준다. 이 기간 동안 귀하는 아무런 답변도 없이 프런트 데스크에서 어리석게 기다리고 있었습니다(차단). 귀하는 주문을 한 후 아무런 답변도 받지 못했습니다. 대기 과정은 동기식 통신입니다.
동기식 비차단
주문점원에게 란저우 우육면을 먹고 싶다고 말하면 주문점원은 5분 정도 걸린다고 답한다. 그러다가 잠시 생각해보면 5분 안에 게시물을 확인하고 지루함을 풀기 위해 다른 일을 할 수 있을 것입니다. 하지만 곧 배가 고프고, 매 순간 괜찮냐고 물어보지만, 아직 괜찮지 않다는 대답을 듣고, 5분도 채 지나지 않아 면접을 보게 됩니다. 기다리는 동안에는 유휴 상태가 아니며 다른 작업을 수행할 수 있습니다. 여전히 적극적으로 결과를 요청하고 주문자의 답변을 기다리고 있으므로 이는 여전히 동기적입니다.
비동기 차단 및 비차단
소위 비동기식이란 적극적으로 결과를 요청할 필요가 없고 콜백 함수를 등록한다는 의미입니다. 즉, 주문을 하면 주문 담당자가 번호를 알려줍니다. 당신 옆에 기계가 있습니다. 당신의 차례가 되면 그 기계가 당신의 번호로 전화를 겁니다. 귀하에게 알리는 과정을 비동기식이라고 합니다. 옆으로 치워두고 아무것도 하지 않으면 차단됩니다. 측면에서 웹페이지를 탐색하는 경우에는 비차단입니다.
그래서 동기식과 비동기식의 차이점은 주로 메시지의 알림 방법에 있습니다. 차단과 비차단은 함수 호출이 알림을 기다리는 상태, 즉 일시 중지 여부에 있습니다. 현재 스레드나 프로세스, 그리고 다른 작업을 계속할 수 있는지 여부.
비동기 비차단을 달성하는 데는 일반적으로 코루틴 방식이 있습니다. 즉, 함수 호출이 IO를 만나면 콜백 함수를 등록한 후 일시 중지하고 반환하므로 비차단입니다. 그러다가 IO가 완료되면 콜백 함수가 일시 중지된 함수를 깨우게 됩니다. 비동기식입니다.
사실 정확하게 이해하시면 동기화란 데이터에 불일치가 없고 순차적으로 단일 스레드가 실행된다는 의미입니다. 동기화되지 않음은 데이터가 균일하지 않음을 의미합니다. 예를 들어 스레드가 여러 개인 경우 이 스레드에서 사용하는 데이터가 다른 스레드에 의해 수정되어 데이터가 동기화되지 않을 수 있습니다. Blocking과 Non-Blocking은 스레드가 실행 중일 때 함수가 반환될 때까지 기다릴지 여부를 나타내며, 단일 스레드인 경우 항상 대기합니다. 시간이 지나면 비동기화가 발생하기 쉽습니다.
Linux의 5가지 IO 모델에 대해 이야기하는 블로그 게시물을 추천합니다. 글이 매우 잘 쓰여 있습니다. 이 내용을 간략하게 말씀드리겠습니다.
우선 동기화에만 소위 차단과 비차단이 있고 비동기에는 없습니다. 일반적인 오해는 비동기가 비차단을 의미한다고 생각하는 것인데, 이는 사실이 아닙니다. 여기서 동기화와 비동기성의 차이점은 네트워크 IO 또는 디스크 IO의 "전체 프로세스"에 차단이 있는지 여부가 전체 프로세스라는 것입니다.
읽기 시스템 호출을 예로 들어 보겠습니다. 사용자 스레드로서 읽기 시스템 호출을 시작하면 두 가지 작업으로 나눌 수 있습니다.
첫 번째는 데이터 읽기입니다. 디스크에서 커널 공간으로 데이터를 읽는 것입니다. 읽기는 시스템 호출이고 사용자 수준 스레드는 이를 처리하기 위해 커널 스레드로만 전달할 수 있다는 것을 알고 있습니다. 스레드는 먼저 데이터를 찾아 커널 공간으로 읽어야 합니다.
두 번째는 데이터 복사입니다: 커널 공간에서 사용자 공간으로 데이터를 읽어옵니다. 그러면 사용자 스레드가 이 데이터를 사용할 수 있습니다.
간단히 말하면
동기화는 위의 두 프로세스가 차단되었으며 사용자 스레드가 기다리고 있음을 의미합니다.
논 블로킹이란 위의 첫 번째 프로세스를 차단하지 않는 것을 의미하지만, 사용자 스레드는 디스크에서 내부 공간으로 데이터가 복사되었는지 OS에 지속적으로 물어봐야 하며 복사가 완료되면 차단됩니다. 데이터 복사 프로세스. 따라서 두 번째 단계에서는 모든 동기화 프로세스가 차단되지만 이는 비차단 호출입니다.
멀티플렉싱: non-blocking과 마찬가지로 두 번째 단계에서도 차단되지만 첫 번째 단계에서는 더 이상 운영 체제에 직접 묻지 않고 처리를 위해 균일하게 커널 스레드에 넘겨집니다(폴링은 Linux에서 구현됨) 및 향상된 epoll 버전) 데이터 읽기가 완료되면 이 스레드는 원래 시스템 호출을 시작한 사용자 스레드에 신호를 보낸 다음 사용자 스레드가 차단에 들어가 데이터 복사를 시작합니다.
비동기: 위의 두 프로세스는 비차단입니다.
위 내용은 간단한 설명이니 도움이 되셨으면 좋겠습니다
동기화와 비동기화의 개념은 주로 IO 측면을 설명합니다. 간단히 말해서, 동기화와 비동기의 주요 차이점은 호출 프로세스 또는 스레드에 알리는 방법입니다. 즉시 반환 알림은 동기식인 반면, 등록된 콜백을 통한 알림은 비동기식입니다. 차단 및 비차단은 주로 함수 호출의 반환 상황을 설명합니다. 즉시 반환되는 함수는 비차단 함수이고 일시 중지된 함수는 차단 함수입니다.
간단히 비유하자면 식당에 가서 음식을 주문하는 경우입니다.
동기 차단
주문점원에게 대만우육면을 먹고 싶다고 말하면 주문점원이 주방으로 가서 잠시 시간을 내서 가져다준다. 이 기간 동안 귀하는 아무런 답변도 없이 프런트 데스크에서 어리석게 기다리고 있었습니다(차단). 귀하는 주문을 한 후 아무런 답변도 받지 못했습니다. 대기 과정은 동기식 통신입니다.
동기식 비차단
주문점원에게 란저우 우육면을 먹고 싶다고 말하면 주문점원은 5분 정도 걸린다고 답한다. 그러다가 잠시 생각해보면 5분 안에 게시물을 확인하고 지루함을 풀기 위해 다른 일을 할 수 있을 것입니다. 하지만 곧 배가 고프고, 매 순간 괜찮냐고 물어보지만, 아직 괜찮지 않다는 대답을 듣고, 5분도 채 지나지 않아 면접을 보게 됩니다. 기다리는 동안에는 유휴 상태가 아니며 다른 작업을 수행할 수 있습니다. 여전히 적극적으로 결과를 요청하고 주문자의 답변을 기다리고 있으므로 이는 여전히 동기적입니다.
비동기 차단 및 비차단
소위 비동기식이란 적극적으로 결과를 요청할 필요가 없고 콜백 함수를 등록한다는 의미입니다. 즉, 주문을 하면 주문 담당자가 번호를 알려줍니다. 당신 옆에 기계가 있습니다. 당신의 차례가 되면 그 기계가 당신의 번호로 전화를 겁니다. 귀하에게 알리는 과정을 비동기식이라고 합니다. 옆으로 치워두고 아무것도 하지 않으면 차단됩니다. 측면에서 웹페이지를 탐색하는 경우에는 비차단입니다.
그래서 동기식과 비동기식의 차이점은 주로 메시지의 알림 방법에 있습니다. 차단과 비차단은 함수 호출이 알림을 기다리는 상태, 즉 일시 중지 여부에 있습니다. 현재 스레드나 프로세스, 그리고 다른 작업을 계속할 수 있는지 여부.
비동기 비차단을 달성하는 데는 일반적으로 코루틴 방식이 있습니다. 즉, 함수 호출이 IO를 만나면 콜백 함수를 등록한 후 일시 중지하고 반환하므로 비차단입니다. 그러다가 IO가 완료되면 콜백 함수가 일시 중지된 함수를 깨우게 됩니다. 비동기식입니다.
일반적으로 차단 및 비차단은 IO 호출이 즉시 반환되는지(비차단) 또는 반환되기 전에 완료될 때까지 기다리는지(차단)를 나타냅니다. 동기화와 비동기성은 광범위한 개념이며 차단 및 비차단의 표현입니다.
사실 정확하게 이해하시면 동기화란 데이터에 불일치가 없고 순차적으로 단일 스레드가 실행된다는 의미입니다. 동기화되지 않음은 데이터가 균일하지 않음을 의미합니다. 예를 들어 스레드가 여러 개인 경우 이 스레드에서 사용하는 데이터가 다른 스레드에 의해 수정되어 데이터가 동기화되지 않을 수 있습니다. Blocking과 Non-Blocking은 스레드가 실행 중일 때 함수가 반환될 때까지 기다릴지 여부를 나타내며, 단일 스레드인 경우 항상 대기합니다. 시간이 지나면 비동기화가 발생하기 쉽습니다.