다트 프로그래밍-동시성

Concurrency동시에 여러 명령 시퀀스를 실행하는 것입니다. 두 개 이상의 작업을 동시에 수행하는 것이 포함됩니다.

다트 사용 Isolates병렬로 작업을 수행하는 도구로. 그만큼dart:isolate package는 단일 스레드 Dart 코드를 가져와 응용 프로그램이 사용 가능한 하드웨어를 더 많이 사용할 수 있도록하는 Dart의 솔루션입니다.

Isolates이름에서 알 수 있듯이는 코드를 실행하는 격리 된 단위입니다. 그들간에 데이터를 보내는 유일한 방법은 클라이언트와 서버간에 메시지를 전달하는 방식과 같이 메시지를 전달하는 것입니다. 안isolate 프로그램이 즉시 멀티 코어 마이크로 프로세서를 활용할 수 있도록 도와줍니다.

이 개념을 더 잘 이해하기 위해 예를 들어 보겠습니다.

import 'dart:isolate';  
void foo(var message){ 
   print('execution from foo ... the message is :${message}'); 
}  
void main(){ 
   Isolate.spawn(foo,'Hello!!'); 
   Isolate.spawn(foo,'Greetings!!'); 
   Isolate.spawn(foo,'Welcome!!'); 
   
   print('execution from main1'); 
   print('execution from main2'); 
   print('execution from main3'); 
}

여기, spawn 의 방법 Isolate 클래스는 함수 실행을 용이하게합니다. foo, 나머지 코드와 병행합니다. 그만큼spawn 함수는 두 개의 매개 변수를 취합니다-

  • 스폰 될 함수
  • 생성 된 함수에 전달 될 객체.

생성 된 함수에 전달할 객체가없는 경우 NULL 값을 전달할 수 있습니다.

두 가지 기능 (foo and main)매번 같은 순서로 실행되지 않을 수도 있습니다. 언제에 대한 보장이 없습니다foo 실행되고 언제 main()실행됩니다. 실행할 때마다 출력이 달라집니다.

출력 1

execution from main1 
execution from main2 
execution from main3 
execution from foo ... the message is :Hello!!

출력 2

execution from main1 
execution from main2 
execution from main3 
execution from foo ... the message is :Welcome!! 
execution from foo ... the message is :Hello!! 
execution from foo ... the message is :Greetings!!

출력에서 Dart 코드가 새로운 isolate Java 또는 C # 코드가 새 스레드를 시작할 수있는 것과 같은 코드 실행에서.

Isolates 스레드와 다르다는 점에서 isolate자체 메모리가 있습니다. 변수를 공유 할 방법이 없습니다.isolates—간에 통신 할 수있는 유일한 방법 isolates 메시지 전달을 통한 것입니다.

Note − 위의 출력은 하드웨어 및 운영 체제 구성에 따라 다릅니다.

V / s 미래 분리

복잡한 계산 작업을 비동기 적으로 수행하는 것은 애플리케이션의 응답 성을 보장하는 데 중요합니다. Dart Future 비동기 작업이 완료된 후 값을 검색하는 메커니즘입니다. Dart Isolates 병렬 처리를 추상화하고 실질적으로 높은 수준에서 구현하는 도구입니다.