패키지 | flash.system |
클래스 | public final class WorkerDomain |
상속 | WorkerDomain Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.4, AIR 3.4 |
참고: 동시성을 위해 워커를 사용하는 것은 데스크톱 플랫폼의 Flash Player와 AIR에서 모두 지원됩니다. 모바일 플랫폼의 경우 Android의 AIR에서는 동시성이 지원되지만, iOS의 AIR에서는 지원되지 않습니다. 동시성을 사용하기 전에 정적 isSupported 속성을 활용하여 동시성 지원 여부를 확인할 수 있습니다.
WorkerDomain()
생성자를 호출하여 WorkerDomain 인스턴스를 직접 만들 필요는 없습니다. 응용 프로그램에 대한 WorkerDomain 인스턴스는 하나만 있습니다. 동시성을 위한 워커 사용이 지원되는 컨텍스트에서는 런타임이 시작 시 WorkerDomain을 자동으로 만듭니다. 이러한 인스턴스에 액세스할 때는 정적 current
속성을 사용합니다.
Worker 클래스의 새 인스턴스를 만들려면 createWorker()
메서드를 사용합니다. 현재 실행 중인 Worker 객체 집합에 액세스하려면 listWorkers()
메서드를 사용합니다.
관련 API 요소
속성 | 정의 주체 | ||
---|---|---|---|
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
current : WorkerDomain [정적] [읽기 전용]
코드가 현재 실행 중인 WorkerDomain 인스턴스입니다. | WorkerDomain | ||
isSupported : Boolean [정적] [읽기 전용]
현재 런타임 컨텍스트에서 동시 코드 실행을 위해 WorkerDomain 및 Worker 객체를 지원하는지 여부를 나타냅니다. | WorkerDomain |
메서드 | 정의 주체 | ||
---|---|---|---|
swf의 바이트에서 새 Worker 인스턴스를 만듭니다. | WorkerDomain | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
WorkerDomain에서 현재 실행 중인 워커 집합에 액세스할 수 있도록 합니다(Worker 인스턴스의 state 속성이 WorkerState.RUNNING임). | WorkerDomain | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
current | 속성 |
current:WorkerDomain
[읽기 전용] 언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.4, AIR 3.4 |
코드가 현재 실행 중인 WorkerDomain 인스턴스입니다. 이는 응용 프로그램의 유일한 WorkerDomain입니다.
구현
public static function get current():WorkerDomain
isSupported | 속성 |
createWorker | () | 메서드 |
public function createWorker(swf:ByteArray, giveAppPrivileges:Boolean = false):Worker
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.4, AIR 3.4 |
swf의 바이트에서 새 Worker
인스턴스를 만듭니다.
생성된 각각의 워커는 격리된 swf 응용 프로그램으로 실행됩니다. Worker 인스턴스를 만들려면 SWF 파일의 바이트를 ByteArray 인스턴스로 가져와 이 메서드로 전달합니다. 이를 위해 swf의 바이트에 액세스하는 일반적인 방법에는 다음과 같은 세 가지가 있습니다.
[Embed] 메타태그를 사용하여 .swf 파일을 응용 프로그램에 ByteArray로 포함합니다.
// Embed the SWF file [Embed(source="../swfs/BgWorker.swf", mimeType="application/octet-stream")] private static var BgWorker_ByteClass:Class; private function createWorker():void { // create the background worker var workerBytes:ByteArray = new BgWorker_ByteClass(); var bgWorker:Worker = WorkerDomain.current.createWorker(workerBytes); // listen for worker state changes to know when the worker is running bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler); // set up communication between workers using // setSharedProperty(), createMessageChannel(), etc. // ... (not shown) bgWorker.start(); }
URLLoader를 사용하여 외부 SWF 파일을 불러옵니다.
// load the SWF file var workerLoader:URLLoader = new URLLoader(); workerLoader.dataFormat = URLLoaderDataFormat.BINARY; workerLoader.addEventListener(Event.COMPLETE, loadComplete); workerLoader.load(new URLRequest("BgWorker.swf")); private function loadComplete(event:Event):void { // create the background worker var workerBytes:ByteArray = event.target.data as ByteArray; var bgWorker:Worker = WorkerDomain.current.createWorker(workerBytes); // listen for worker state changes to know when the worker is running bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler); // set up communication between workers using // setSharedProperty(), createMessageChannel(), etc. // ... (not shown) bgWorker.start(); }
단일 swf를 최초 워커 및 백그라운드 워커로 모두 사용합니다.
// The primordial worker's main class constructor public function PrimordialWorkerClass() { init(); } private function init():void { var swfBytes:ByteArray = this.loaderInfo.bytes; // Check to see if this is the primordial worker if (Worker.current.isPrimordial) { // create a background worker var bgWorker:Worker = WorkerDomain.current.createWorker(swfBytes); // listen for worker state changes to know when the worker is running bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler); // set up communication between workers using // setSharedProperty(), createMessageChannel(), etc. // ... (not shown) bgWorker.start(); } else // entry point for the background worker { // set up communication between workers using getSharedProperty() // ... (not shown) // start the background work }
createWorker()
를 사용하여 Worker 객체를 만들면 워커의 실행이 시작되지 않습니다. 워커의 코드 실행을 시작하려면 Worker 객체의 start()
메서드를 호출합니다.
프레임 속도는 기본 렌더링 스레드가 다른 코드에 의해 차단될 때 감소할 수 있으며, 워커를 사용하면 이러한 문제를 최소화할 수 있습니다. 그러나 워커는 시스템 메모리 및 CPU를 추가로 점유하며 이는 곧 전반적인 응용 프로그램 성능의 저하로 이어질 수 있습니다. 각 워커에서는 자체의 런타임 가상 머신 인스턴스를 사용하므로 작은 워커도 큰 오버헤드를 일으킬 수 있습니다. 워커를 사용할 경우 모든 대상 플랫폼에서 해당 코드를 테스트하여 시스템에 추가되는 부담이 너무 크지 않은지 확인해야 합니다. 일반적인 상황에서 백그라운드 워커는 3개 이상 사용하지 않는 것이 좋습니다.
매개 변수
swf:ByteArray — 유효한 swf의 바이트를 포함한 ByteArray입니다.
| |
giveAppPrivileges:Boolean (default = false ) — 워커가 AIR에서 응용 프로그램 샌드박스 권한을 부여받아야 하는지 여부를 나타냅니다. Flash Player에서는 이 매개 변수가 무시됩니다.
|
Worker — 새로 만들어진 Worker입니다(만들기에 성공한 경우). 반환 값이 null 이면 현재 컨텍스트가 동시성을 지원하지 않거나 새 워커를 만들 경우 구현 제한을 초과하기 때문에 워커를 만들 수 없다는 것을 나타냅니다.
|
오류
SecurityError — 해당 바이트가 swf 매개 변수로 전달되는 swf가 속한 보안 도메인이 이 메서드를 호출한 swf와 다른 경우입니다.
|
listWorkers | () | 메서드 |
Tue Jun 12 2018, 03:17 PM Z