[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Googleのプログラミング言語Dartにはスレッドがありません。
正確にはスレッドのようなものは、あるといえばあるのですが、だいぶ使い勝手が違います。
他の言語ではマルチスレッドはお手軽ですが、Dartではかなり制限されています。
他のスレッドのメモリへアクセスができません。
他のスレッドに情報を渡すには明示的に送ってやらなければいけません。
送れる情報はintやdoubleや文字列やそれらのリストなど、極めて限定されています。
おまけに、ブラウザ上で動かすためには、新たにdartのソースファイルを用意しなくてはいけないようです。
そのファイルに書かれたdartを、別スレッドで動かす感じです。
もちろんメモリは共有されません。
別プロセスで動かしているかのような感覚です。
import "dart:isolate"; void main() { ReceivePort fromSubIsolate = new ReceivePort(); Isolate.spawnUri( new Uri.file("subIsolate.dart"), [], fromSubIsolate.sendPort); fromSubIsolate.listen((message){ print(message); }); }
import "dart:isolate"; void main(List<String> args, SendPort sendPort){ sendPort.send("isolate created."); }
isolate is created.
Dartではスレッドのことを、Isolateと呼びます。
正確にはIsolateはスレッドではなく、ほかのプロセスである可能性すらあるので、スレッドと呼ぶのは不適切かもしれません。
このプログラムでは別のIsolateで"Isolate is created."というメッセージを作り、メインとなっているUIのIsolateに送っています。
(メインのIsolateでしかUIは操作できないようです。)
Isolate間の通信にはReceivePortとSendPortを使います。
といってもSendPortはReceivePortを作ると自動的についてきます。
SendPortを使って情報を送ると、対応するReceivePortからその情報を読めるようになります。
SendPortはspawnUriで、子となるIsolateに送ることができます。
子IsolateでメインのIsolateに情報を送れるわけですね。