Последняя документация о изолятах Dart

Недавно я начал работать с Dart (www.dartlang.org), и пока он мне очень нравится. Очень перспективной функцией являются изоляты, но я не уверен, с чего начать.

Документация, которую я нашел до сих пор, была до критического изменения (КРИТИЧЕСКОЕ ИЗМЕНЕНИЕ: dart:isolate) в октябре 2013 года. Информация в этом электронном письме "Ключевое изменение" довольно сложна, и похоже, что новый API сложнее старого.

У меня есть несколько вопросов:

  • Является ли Dart: isolate API стабильным?
  • Есть ли актуальная документация?
  • Есть рабочие примеры?

Спасибо за любую помощь, Хендрик Ян


person Hendrik Jan    schedule 07.01.2014    source источник


Ответы (1)


Я попробовал этот пример, и он работает https://gist.github.com/olostan/7883315.

import "dart:isolate";

void main() {
  print("Starting");
  var sPort = new ReceivePort();
  SendPort rPort;
  sPort.listen((msg) {
    if (msg is SendPort) {
      print("Host got port. sending back");
      rPort = msg;
      rPort.send("Hello!");
    }
    else print("Host got $msg");
    rPort.send(null);
    sPort.close();
  });
  Isolate.spawn(test,sPort.sendPort);
}
void test(sender) {
  var rPort = new ReceivePort();
  sender.send(rPort.sendPort);
  rPort.listen((msg){
    print("Worker got $msg");
    if (msg!=null)
      sender.send("I am worker");
    else rPort.close();
  });
}

Похоже, что изоляты еще не используются слишком часто, поэтому некоторые ошибки все еще могут быть.
Последней проблемой, о которой я читал, была отладка кода, работающего в изолятах. Я еще не знаю, решена ли эта проблема.
Это также зависит от того, хотите ли вы использовать изоляты на сервере или в браузере.
Насколько мне известно, на виртуальной машине это более стабильно.

person Günter Zöchbauer    schedule 07.01.2014
comment
Привет, Гюнтер, спасибо. Я никогда не использовал Dart на сервере. В Dartium я получаю, что spawnFunction не поддерживается из изолята с поддержкой dom. Вы знаете, сработает ли это в будущем? (Я знаю, что могу использовать spawnUri, как показано здесь: japhr.blogspot .nl/2013/11/new-fangled-dart-isolates.html, но это выглядит более громоздко). - person Hendrik Jan; 07.01.2014
comment
О, я тоже планировал добавить эту ссылку, но, очевидно, забыл. Рад, что ты все-таки нашел. Я видел в сообщении Криса, что spawnFunction() не поддерживается` выбрасывается, даже когда на самом деле использовалось spawn(). У меня также нет дополнительной информации об этой архитектуре. Я предлагаю опубликовать вопрос в группе Dart, на которую вы ссылались в сообщении BREAKING CHANGE. - person Günter Zöchbauer; 07.01.2014
comment
@hendrik - см. дополнительные примеры -any-example-for-darts-spawnuri-in-library-dartisolate. Кажется, что дополнительные накладные расходы с Isolate.spawnUri заключаются в 1) размещении вашего кода в отдельной библиотеке 2) работе с Future, который сообщает вам, правильно ли создан изолят, с этого момента все идентично. - person Argenti Apparatus; 03.08.2014
comment
Если я добавлю sleep(new Duration(seconds: 5)); после строки Isolate.spawn, выполнение будет приостановлено перед нерестом. Почему? А как тогда создавать петли? - person OZ_; 14.09.2014
comment
spawn является асинхронным, это означает, что он выполняется после текущего «потока выполнения» для выполнения всего кода синхронизации, но sleep останавливает текущий «поток» и, следовательно, все дальнейшее выполнение предотвращается до завершения сна . Вы можете использовать new Future.delayed(new Duration(seconds: 5), () { your delayed code here;}); для задержки выполнения кода после isolate.spawn(). sleep следует избегать любой ценой в производственном коде. - person Günter Zöchbauer; 14.09.2014