>  기사  >  Java  >  동기식, 비동기식, 차단 및 비차단 간의 차이점에 대한 자세한 설명

동기식, 비동기식, 차단 및 비차단 간의 차이점에 대한 자세한 설명

Y2J
Y2J원래의
2017-05-06 13:03:451568검색

이 글에서는 주로 Java의 동기화, 비동기, 차단, 비차단의 차이점에 대한 자세한 설명을 소개합니다. 도움이 필요한 친구는

동기화, 비동기, 차단 및 비차단을 참조하세요. non-blocking in Java 차이점에 대한 자세한 설명

간단히 말하면:

차단은 작업을 마칠 때까지 돌아올 수 없다는 의미입니다. 문제가 처리될 때까지 기다렸다가 돌아오세요.

비차단이란 본인이 먼저 처리한다는 의미이며, 이를 발견하면 제가 먼저 확인하겠습니다. 문제가 있으면 즉시 리더에게 보고하세요.

recv 함수의 경우 동일한 원칙이 적용됩니다. 함수의 내부 작동 메커니즘은 실제로 TCP/IP 프로토콜 스택의 수신 버퍼가 이를 알리기를 기다리고 있습니다. 안녕하세요, 차단 모드의 소켓의 경우. TCP/IP 프로토콜 스택의 수신 버퍼가 알리지 않으면 결과적으로 다음이 반환되지 않습니다. 시스템 리소스를 소모합니다.... 비차단 모드 소켓의 경우 함수는 즉시 반환된 다음 다음을 알려줍니다. WSAEWOULDDBLOCK- --"지금은 데이터가 없습니다. 나중에 다시 확인하세요."

확장:

네트워크

프로그래밍을 할 때 4가지 호출 방법을 자주 보게 됩니다. : 동기식, 비동기식, 차단 및 비차단. 이러한 방법은 서로를 이해하기 쉽지 않습니다. 다음은 이 용어에 대한 나의 이해입니다.

1. 동기화

소위 동기화란 함수 호출 시 결과를 얻을 때까지 호출이 반환되지 않음을 의미합니다. . 이 정의에 따르면 실제로 대부분의 함수는 동기식으로 호출됩니다(예: sin, isdigit 등). 그러나 일반적으로 동기식 및 비동기식에 관해 이야기할 때는 특히 다른 구성 요소의 협력이 필요하거나 완료하는 데 일정 시간이 필요한 작업을 의미합니다. 가장 일반적인 예는 SendMessage입니다. 이 함수는 메시지를 창에 보내고 상대방이 메시지를 처리할 때까지 반환하지 않습니다. 상대방이 처리를 마친 후 함수는 메시지 처리 함수에서 반환한 LRESULT 값을 호출자에게 반환합니다.

2. 비동기식

비동기식은 동기식과 반대되는 개념입니다. 비동기 프로시저 호출이 실행되면 호출자는 결과를 즉시 얻지 못합니다. 실제로 통화를 처리하는 구성요소는 통화가 완료되면 상태, 알림, 콜백을 통해 호출자에게 알립니다. CAsycSocket 클래스를 예로 들어 보겠습니다. CSocket은 CAsyncSocket에서 파생되지만 해당 함수는 비동기에서 동기로 변환되었습니다. 클라이언트가 Connect 함수를 호출하여 연결 요청을 발행하면 호출자 스레드가 즉시 하향 실행될 수 있습니다. 실제로 연결이 설정되면 소켓의 최하위 계층은 개체

에 알리는 메시지를 보냅니다. 여기서는 실행 구성 요소와 호출자가 상태, 알림, 콜백이라는 세 가지 채널을 통해 결과를 반환한다고 언급합니다. 어느 것을 사용할 수 있는지는 경영진의 구현에 따라 다르며 경영진이 여러 선택 사항을 제공하지 않는 한 호출자의 통제를 받지 않습니다. 실행 구성 요소가 상태를 사용하여 알리면 호출자는 특정 시간마다 이를 확인해야 하며 이는 매우 비효율적입니다(멀티 스레드 프로그래밍을 처음 접하는 일부 사람들은 항상 루프를 사용하여 특정

변수 value, 이는 실제로 매우 심각한 실수입니다). 알림을 사용하면 실행 구성 요소에 추가 작업이 거의 필요하지 않으므로 효율성이 매우 높습니다. 콜백 함수는 사실 알림과 크게 다르지 않습니다. 3. 차단

블로킹 호출은 호출 결과가 반환되기 전에 현재 스레드가 일시 중단된다는 의미입니다. 함수는 결과를 얻은 후에만 반환됩니다. 어떤 사람들은 차단 호출과 동기 호출을 동일시할 수도 있지만 실제로는 다릅니다. 동기 호출의 경우 대부분의 경우 현재 스레드는 여전히 활성 상태이지만 논리적으로 현재 함수는 반환되지 않습니다. 예를 들어, CSocket에서 수신 함수를 호출합니다. 버퍼에 데이터가 없으면 이 함수는 반환하기 전에 데이터가 있을 때까지 기다립니다. 이때 현재 스레드는 계속해서 다양한 메시지를 처리하게 됩니다. 메인 창과 호출 함수가 동일한 스레드에 있는 경우 특수 인터페이스 작업 함수에서 호출하지 않는 한 메인 인터페이스는 계속 새로 고쳐져야 합니다. 소켓이 데이터를 수신하기 위해 사용하는 또 다른 함수인 Recv는 차단 호출의 예입니다. 소켓이 블로킹 모드에서 작동 중일 때 데이터 없이 이 함수를 호출하면 데이터가 있을 때까지 현재 스레드가 일시 중지됩니다.

4. 논 블로킹

논 블로킹과 블로킹의 개념이 서로 일치하여 해당 기능이 차단되지 않는다는 뜻입니다. 결과를 즉시 얻을 수 없고 즉시 반환될 때까지.

객체의 차단 모드와 차단 함수 호출

객체가 차단 모드에 있는지와 함수가 호출을 차단하는지 여부 사이에는 강한 상관관계가 있지만 아무도- 일대일 대응. 차단 객체에 대한 비차단 호출 방법이 있을 수 있으며 특정 API를 통해 상태를 폴링하고 적절한 시간에 차단 기능을 호출하여 차단을 피할 수 있습니다. 비차단 객체의 경우 특수 함수를 호출하면 차단 호출이 시작될 수도 있습니다. 기능 선택이 그러한 예입니다.

【관련 추천】

1. Java 무료 동영상 튜토리얼

Geek Academy Java 동영상 튜토리얼

3. Java 튜토리얼 매뉴얼

위 내용은 동기식, 비동기식, 차단 및 비차단 간의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.