문제

비동기 호출은 항상 새 스레드를 생성합니까?둘 사이의 차이점은 무엇입니까?

비동기 호출은 항상 새 스레드를 생성하거나 사용합니까?

위키피디아는 말한다:

컴퓨터 프로그래밍에서 비동기 이벤트는 기본 프로그램 흐름과 독립적으로 발생하는 이벤트입니다.비동기 작업은 비차단 방식으로 실행되는 작업으로, 기본 프로그램 흐름이 계속해서 처리되도록 합니다.

단일 스레드에서 비동기 호출을 수행할 수 있다는 것을 알고 있습니까?이것이 어떻게 가능한지?

도움이 되었습니까?

해결책

이 질문은 대답하기에는 너무 일반적입니다.

일반적으로 비동기 호출이 반드시 새 스레드를 생성 할 필요는 없습니다. 그것은 기존 스레드 풀 또는 외부 프로세스가 다른 방법이기 때문에이를 구현하는 한 가지 방법입니다. 언어, 객체 모델 (있는 경우) 및 실행 시간 환경에 크게 의존합니다.

비동기식은 호출 스레드가 앉아서 응답을 기다리지 않으며 호출 스레드에서 비동기 활동이 발생하지 않음을 의미합니다.

그 외에도 더 구체적으로 얻어야합니다.

다른 팁

비동기 적으로 발생 해야하는 작업이 CPU가 작업을 수행 할 필요가 없을 때마다 다른 스레드를 생산하지 않고도 해당 작업을 수행 할 수 있습니다. 예를 들어, 비동기 작동이 I/O 인 경우 CPU는 I/O가 완료 될 때까지 기다릴 필요가 없습니다. I/O 하드웨어 (디스크 컨트롤러, 네트워크 인터페이스 등)가 I/O 작업을 수행하는 동안 작업을 시작한 다음 다른 작업으로 이동할 수 있습니다. 하드웨어는 CPU가 CPU를 방해하여 완료되면 CPU를 알리고 OS는 이벤트를 응용 프로그램에 전달합니다.

더 높은 수준의 추상화 및 API는 OS와 기본 하드웨어에서 사용할 수있는 기본 비동기 API를 노출시키지 않습니다. 이 경우 스폰 된 스레드가 I/O 작업을 기다리는 경우에도 비동기 작업을 수행하기 위해 스레드를 만들기가 쉽습니다.

비동기 조작이 CPU가 작업을 수행하도록 요구하는 경우, 일반적으로 다른 스레드에서 작업이 발생하여 실제로 비동기식이되기 위해서는 작업이 발생해야합니다. 그럼에도 불구하고, 실행 장치가 둘 이상인 경우에만 비동기식이 될 것입니다.

아니요, 비동기 호출에는 항상 스레드가 포함되지는 않습니다.

그들은 일반적으로 발신자와 병렬로 계속되는 일종의 작업을 시작합니다. 그러나 해당 작업은 다른 프로세스, OS, 다른 하드웨어 (디스크 컨트롤러와 같은), 네트워크의 다른 컴퓨터 또는 사람에 의해 처리 될 수 있습니다. 스레드가 일을 병렬로 수행하는 유일한 방법은 아닙니다.

멀티 스레딩은 동일한 프로세스에서 두 개 이상의 작업이 발생하는 것을 의미합니다.비동기 프로그래밍은 프로세스 전반에 걸쳐 확산됩니다.예를 들어 내 작업이 웹 서비스를 호출하는 경우 스레드는 웹 서비스가 반환될 때까지 기다릴 필요가 없습니다.여기서는 스레드가 다른 시스템의 프로세스가 완료될 때까지 기다리지 않도록 하는 비동기 프로그래밍을 사용합니다.그리고 웹 서비스로부터 응답을 받기 시작하면 웹 서비스가 요청 처리를 완료했음을 알리기 위해 메인 스레드를 중단할 수 있습니다.이제 메인 스레드가 결과를 처리할 수 있습니다.

JavaScript는 단일 스레드 및 비동기식입니다. 예를 들어 xmlhttprequest를 사용하는 경우 응답이 반환 될 때 비동기 적으로 실행되는 콜백 함수를 제공합니다.

John Resig는 방법에 대한 관련 문제에 대한 좋은 설명을 가지고 있습니다. 타이머는 JavaScript에서 작동합니다.

Windows는 실제 스레드를 지원하기 전에 메시지 루프를 사용하여 비 선제 시간 (버전 2.13, 3.0, 3.1 등) 이후 항상 비동기식 처리를했습니다. 따라서 귀하의 질문에 답하기 위해, 비동기 처리를 수행하기 위해 스레드를 만들 필요는 없습니다.

비동기 통화는 통화를 호출하는 것과 동일한 시스템/장치에서 발생할 필요조차 없습니다. 따라서 질문이 있다면, 비동기 호출은 현재 프로세스에서 스레드를 요구하는 경우 대답은 아니오입니다. 그러나 비동기 요청을 처리하는 어딘가에 실행 스레드가 있어야합니다.

실행 실은 모호한 용어입니다. 초기 Macintosh 및 Windows OS'E와 같은 협력적인 작업 시스템에서 실행 스레드는 단순히 다른 스택, 지시 포인터 등을 실행하는 요청을 한 것과 동일한 프로세스 일 수 있습니다. 그러나 사람들이 일반적으로 비동기 통화에 대해 이야기 할 때 , 일반적으로 다른 스레드가 프로세스 내 (즉, 동일한 프로세스 내) 인 경우 다른 스레드로 처리되는 호출 또는 프로세스 간 인 경우 다른 프로세스를 의미합니다.

잠금 기술은 고정 기술이 실행되는 별도의 실행 스레드에 관계없이 일반적으로 데이터를 동일하게하기 때문에 프로세스 간 통신 (또는 IPC) 간 통신 (IPC)이 일반적으로 일반화되도록 일반적으로 일반화됩니다.

일부 시스템을 사용하면 콜백을 사용하는 일부 시설의 커널의 동시성을 활용할 수 있습니다. 다소 모호한 인스턴스의 경우, 비동기 IO 콜백을 사용하여 MAC 시스템 6-8의 비판적 멀티 태스킹 일에 비 블로킹 인터넷 세버를 다시 구현했습니다.

이렇게하면 "스레드가없는 귀하의 프로그램에 동시 실행 스트림이 있습니다. 따라서.

비동기식은 단지 프로그램 (기능 호출, 장치 등)을 기다리는 프로그램을 차단하지 않음을 의미합니다. 별도의 스레드에서 구현할 수 있지만 동기 작업에 전용 스레드를 사용하고 일종의 이벤트 시스템을 통해 통신하여 비동기 같은 동작을 달성하는 것이 일반적입니다.

단일 스레드 비동기 프로그램의 예가 있습니다. 같은 것 :

...do something
...send some async request
while (not done)
    ...do something else
    ...do async check for results

비동기 통화의 특성은 통화가 진행되는 동안 응용 프로그램이 계속 실행되기를 원한다면 새로운 스레드 또는 적어도 활용하십시오 비동기 콜백을 처리 할 목적으로 만 만든 또 다른 스레드.

때로는 상황에 따라 비동기 방법을 호출 할 수 있지만 사용자에게 동기식으로 보이게 할 수도 있습니다 (즉, 비동기 메소드가 완료되었음을 신호 할 때까지 블록). 이것은 Win32 API를 통해 달성 될 수 있습니다 WaitforsingleObject.

an 비동기 작동 발신자가 다른 코드를 실행하기 전에 완료되기를 기다리도록 강요하지 않고 시작 후에 백그라운드에서 계속되는 작업입니다.

응답이 도착할 때까지 호출 프로그램 (또는 스레드)을 차단하는 대신, 비동기식 (비 블로킹이라고도 함) 구현은 데이터베이스 또는 웹 서비스 등에 요청을 보내고 즉시 반환하여 프로그램이 다른 코드를 계속 실행하도록합니다. 원격 서비스가 답장을 보냅니다. 응답이 도착하면 시스템은 콜백을 실행하여 (메시지 루프 또는 환경에 따라 별도의 IO 완료 포트 스레드에서) 코드가 응답을 처리하도록합니다.

멀티 스레딩 한 번에 하나 이상의 실행 스레드를 실행하는 것을 의미합니다. 이 모델에서는 모든 작업이 여전히 동기화되지만 CPU는 동시에 여러 동기 작업 스레드를 실행합니다.

멀티 스레딩은 다중 코어 프로세서에서 여러 (및 독립적 인) CPU 결합 작업을 호출 할 때 가장 의미가 있습니다. 예를 들어, 이미지의 모든 픽셀을 독립적으로 분석하는 프로그램은 이미지를 각 CPU 코어에 대해 하나의 스트립으로 나눈 다음 동시에 자체 스레드에서 각 스트립을 분석 할 수 있습니다.

여기에서 자세히 알아보십시오. https://blog.slaks.net/2014-12-23/parallelism-async-threading-emplained/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top