Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Side by Side Diff: lib/isolate/isolate_api.dart

Issue 10837070: Remove old isolate API and update all code in the repository to use (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review comments. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « lib/isolate/dart2js/isolateimpl.dart ('k') | lib/isolate/isolate_compiler.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 class IsolateSpawnException implements Exception { 5 class IsolateSpawnException implements Exception {
6 const IsolateSpawnException(String this._s); 6 const IsolateSpawnException(String this._s);
7 String toString() => "IsolateSpawnException: '$_s'"; 7 String toString() => "IsolateSpawnException: '$_s'";
8 final String _s; 8 final String _s;
9 } 9 }
10 10
11 /** 11 /**
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 SendPort toSendPort(); 139 SendPort toSendPort();
140 140
141 } 141 }
142 142
143 // TODO(kasperl): Make this hashable and document it. 143 // TODO(kasperl): Make this hashable and document it.
144 interface SendPortSync { 144 interface SendPortSync {
145 145
146 callSync(var message); 146 callSync(var message);
147 147
148 } 148 }
149
150 /**
151 * NOTE: This API will be deprecated soon.
152 *
153 * The [Isolate] class serves two purposes: (1) as template for spawning a new
154 * isolate, and (2) as entry-point for the newly spawned isolate.
155 *
156 * New isolates are spawned by sub-classing [Isolate] and then invoking
157 * [:spawn:] on the instance. This will spawn a new isolate, which creates a
158 * new instance of the class, initializes the instance's [port] field
159 * and invokes the instance method [main].
160 *
161 * The new instance is created by invoking the default constructor of the
162 * class that served as template for spawning the new isolate. This means, that
163 * sub-classes must have a default constructor (i.e. no-argument constructor).
164 *
165 * Isolates may be "heavy" or "light". Heavy isolates live in their own thread,
166 * whereas "light" isolates live in the same thread as the isolate which spawned
167 * them.
168 *
169 * NOTE: once [spawnFunction] and [spawnUri] are supported in both frog and the
170 * dartvm, this class will be removed. The distinction of heavy and light will
171 * be removed too. Thus far the main use for 'light' isolates is for running
172 * isolates that share access to the DOM. A special API will be added for this
173 * purpose soon. See the library top-level comments for more details.
174 */
175 // TODO(sigmund): delete once we implement the new API in the vm
176 class Isolate {
177
178 /**
179 * Redirects to [Isolate.light].
180 */
181 Isolate() : this.light();
182
183 /**
184 * Creates a new isolate-template for a light isolate.
185 */
186 Isolate.light() : _isLight = true;
187
188 /**
189 * Creates a new isolate-template for a heavy isolate.
190 */
191 Isolate.heavy() : _isLight = false;
192
193 /**
194 * Spawns a new isolate, using this instance as template.
195 *
196 * The new isolate lives in a new thread (for heavy templates)
197 * or in the same thread as the current isolate (for light templates), if
198 * possible.
199 *
200 * During the initialization of the new isolate a [ReceivePort] is created
201 * inside the new isolate and stored in the read-only field [port].
202 * A corresponding [SendPort] is sent to the isolate that invoked [spawn].
203 * Since spawning an isolate is an asynchronous operation this method returns
204 * a [Future] of this [SendPort].
205 *
206 * A common pattern to instantiate new isolates is to enqueue the instructions
207 * using [Future.then].
208 * [:myIsolate.spawn().then((SendPort port) { port.send('hi there'); });:]
209 */
210 Future<SendPort> spawn() {
211 return _IsolateNatives.spawn(this, _isLight);
212 }
213
214 // The private run method is invoked with the receive port. Before
215 // main is invoked we store the port in a field so it can be
216 // accessed from subclasses of Isolate.
217 void _run(ReceivePort port) {
218 _port = port;
219 main();
220 }
221
222 /**
223 * When [Isolate]s are used as entry-points, the [port] field contains a
224 * [ReceivePort]. The isolate that initiated the spawn holds a corresponding
225 * [SendPort].
226 *
227 * Note that isolates should generally close their [ReceivePort]s when they
228 * are done, including this port.
229 */
230 ReceivePort get port() {
231 return _port;
232 }
233
234 /**
235 * When isolates are created, an instance of the template's class is
236 * instantiated in the new isolate. After the [port] has been set up, this
237 * [main] method is invoked on the instance.
238 */
239 abstract void main();
240
241 final bool _isLight;
242 ReceivePort _port;
243 }
OLDNEW
« no previous file with comments | « lib/isolate/dart2js/isolateimpl.dart ('k') | lib/isolate/isolate_compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698