2009-12-23 8 views

답변

4

즉, 호출이 즉시 반환된다는 것을 의미합니다 (차단하지 않음). 나중에 콜백 발사로 인해 결과가 나중에 나옵니다. 이 (의사 코드) 같은

뭔가 :이 예에서

function printResult(result) 
    if result is "foo" print "FOO" else print "BAR" 

function fooBar() 
    Orm.myQuery().setCallback(printResult) 
    Orm.myOtherQuery().setCallback(printResult) 

는 두 쿼리를 동시에 실행된다 (그리고 두 번째 쿼리의 응답은 전에 먼저 올 수있다).

비 차단 IO를 사용하는 프로그램에서 유용합니다. 동시에 여러 데이터베이스에서 쿼리를 실행하면 대기 시간이 현저하게 늘어납니다. 각 쿼리에 1ms가 걸리면 10 개의 쿼리를 수행하는 데 10ms가 아닌 1ms가 걸립니다.

+0

스레드를 차단하지 않는 것이 실제로 가장 중요한 문제는 아닙니다. 일반적으로 연결은 비동기 적으로 사용할 수 없습니다 (즉,이 방법은 다른 연결에서 쿼리를 보내는 경우에만 작동합니다). 여러 쿼리를 함께 그룹화하는 것이 일반적으로 더 중요합니다. 쿼리가 실행되는 동안 클라이언트에서 작업을 수행 할 수 있습니다. 그러나 쿼리가 상대적으로 단순하다면 함께 그룹화하면 데이터베이스로의 왕복 횟수를 크게 줄일 수 있습니다. 많은 ORM (NHibernate, DataObjects.Net 이상)은 향후 (지연된) 쿼리에 대한 지원을 제공하며,이 시점에서 더 매력적입니다. –