2017-10-03 13 views
-3

내부 통제하에있는 계산 (예 : 최적화 또는 모델 피팅)을 수행하는 루프 (불투명도에서 제어되는 작업 제외)에서 간단한 다트 코드 스 니펫을 시연하십시오. 파일 액세스와 같은 외부 컨텍스트)를 인터리브 방식으로 실행할 수 있습니다.async를 사용하는 Dart 언어의 while 루프 인터리브 실행 및

내 가설은 파일 액세스와 같은 루프 또는 웹 소켓 사용과 같은 각 루프 내에서 차단 명령을 실행하지 않으면 불가능하다는 것입니다.

다트의 비동기 프로그래밍에 관한 문서에는 이러한 의미에서 "블로킹"이라는 용어가 언급되어 있지 않습니다. vertx (자바 애플리케이션 서버 라이브러리)에서 비동기 프로그래밍에 관한 문서는 그렇다. 그러나 플랫폼이 비동기 프로그래밍에 대해 다른 의도를 구현할 수 있기 때문에 후자가 일반화 될 수 있는지 여부는 알 수 없습니다.

답변

2

귀하의 질문에 대한 확신이 없습니다. 당신의 가설은 내가 올바르게 이해한다면 정확합니다.

다트는 각 분리 균주 내에서 단일 나 사형입니다. 한 번에 각 격리에서 하나만 실행할 수 있습니다.

즉, 비동기 작업을 수행하지 않는 긴 계산은 다른 계산과 인터리브하지 않습니다.

계산이 비동기 작업 (다른 작업을 기다리는 것을 의미)을 수행하면 다른 작업이 실행됩니다.

+0

좋은 점은, 아마 vertx/java 경험에 혼란 스러웠을 것입니다 ... 이벤트 루프는 다른 일을 할 수도 있습니다. 자바에서는 하나 이상의 스레드가있을 수 있습니다. – user8311883

4

Isolate 클래스는 VM의 여러 스레드 또는 브라우저의 웹 작업자를 실행할 수 있습니다.

편집 : 당신을 대신하여 "dartlang examples isolates"에서 Google 검색을 실행하거나 코드를 작성하는 것은 제 직업이 아닙니다. 제 대답이 귀하의 질문에 정확하게 대답합니다. 격리를 사용하여 여러 스레드를 실행하고 포트를 통해 서로 통신하는 독립적 인 장기 실행 계산을 수행 할 수 있습니다.

+0

내 질문과 관련하여 어떤 결론을 도출 할 수 있습니까? 당신은 분리가 할 수 있다고 말하지만, 그것은 가설을 위조하기 위해 시간 소모적 인 계산을 포함하는 비동기 함수를 인터리브하는 방법을 보여주지 못합니다 ... 그래서, 그것은 내 질문에 대답하지 않습니다. – user8311883