http://krondo.com/?p=1209 또는 Does an asynchronous call always create/call a new thread?을 읽은 후에도 본질적으로 단일 스레드 시스템에서 비동기 호출을 제공하는 방법에 대해서는 여전히 혼란 스럽습니다. 나는 지금까지 나의 이해를 설명하고 나의 의심을 지적 할 것이다.단일 스레드로 비동기 처리
내가 읽은 예제 중 하나는 요청의 비동기 처리를 제공하는 TCP 서버를 설명하는 것이 었습니다. get(Callback c)
이며 나중에 콜백이 호출됩니다. 자, 여기 내 첫 번째 문제 - 우리는 이미 두 개의 시스템, 하나의 서버와 하나의 클라이언트가 있습니다. 이것은 제가 의미하는 바가 아닙니다. 서버에 하나, 클라이언트 측에 적어도 하나씩 두 개의 스레드가 있습니다.
다른 예제는 JavaScript로 Node.js
인 단일 스레드 비동기 시스템에서 가장 눈에 띄는 예제입니다. 내가 어쩌면, 자바의 관점에서 생각하고, 내 머리를 통해 얻을 수있는 것은 이것이다 : 나는 아래의 코드를 실행하면 (잘못된, 아마 잔인한 구문에 대한 사과) :
function foo(){
read_file(FIle location, Callback c) //asynchronous call, does not block
//do many things more here, potentially for hours
}
호출이 파일이 실행 (STH) 및 읽기 반환, 내 함수의 나머지 부분을 실행할 수 있습니다. 하나의 스레드 즉, 내 함수를 실행하는 스레드가 있기 때문에 동일한 스레드 (내 물건을 실행하는 유일한 스레드)가 디스크에서 바이트를 읽는 방법은 어떨까요?
기본적으로, 본질적으로 단일 스레드이며 일을 더 작은 것들로 나눌 수있는 일종의 라운드 로빈 스케줄러처럼 작동하는 기본 메커니즘이 누락 된 것처럼 보입니다. 또는 다중 골치 아픈 구성 요소를 호출 할 수 있습니다. 스레드를 생성하고에서 파일을 읽으십시오.
모든 의견에 대해 미리 감사 드리며 실수를 지적하십시오.
업데이트 : 답장을 보내 주셔서 감사합니다. 이것 좀 도와 또한 좋은 소스는 여기에 있습니다 :
- http://www.html5rocks.com/en/tutorials/async/deferred/
- http://lostechies.com/johnteague/2012/11/30/node-js-must-know-concepts-asynchrounous/
- http://www.interact-sw.co.uk/iangblog/2004/09/23/threadless (.NET)
- http://ejohn.org/blog/how-javascript-timers-work/ (타이머 내장)
- http://www.mobl-lang.org/283/reducing-the-pain-synchronous-asynchronous-programming/
이 수도 있고 암시 적으로 보류중인 작업에 의해 시작 배경 스레드 수 있지만,이 작업 자체를 시작 자바 스크립트 코드에 완전히 불투명와 무관입니다하지 않을 수 있습니다. 웹 브라우저 (또는 NodeJS, FTM)의 JavaScript 스레드의 핵심 이벤트 루프는 단일 스레드입니다. – Noseratio