Wolfram言語

チャネルフレームワーク

多対1通信と多対多通信

多対1通信のチャネルでリッスン(待ち受け)し始める.

In[1]:=
Click for copyable input
listener = ChannelListen["master"]
Out[1]=

複数のセッション(例えば,同じマシンの並列カーネル)からチャネルにメッセージを送信する.

In[2]:=
Click for copyable input
ParallelEvaluate[ChannelSend["master", $KernelID]]
Out[2]=

受信されたメッセージ.

In[3]:=
Click for copyable input
listener["Message", All]
Out[3]=

メッセージ交信のダイアグラム.

完全なWolfram言語入力を表示する
In[4]:=
Click for copyable input
spikey = ImageCrop@ Import["http://www.wolfram.com/spikey/img/spikey.png"];
In[5]:=
Click for copyable input
Graph[Table[i \[DirectedEdge] 0, {i, listener["MessageID", All]}], VertexShape -> spikey, VertexSize -> .5]
Out[5]=

複数の並列カーネルセッション内の同じチャネルでリッスンし始める.

In[6]:=
Click for copyable input
ParallelEvaluate[l = ChannelListen["all"]]
Out[6]=

すべての並列カーネルがそれぞれのIDをチャネルに送信するようにする.

In[7]:=
Click for copyable input
ParallelEvaluate[ChannelSend["all", $KernelID]]
Out[7]=

それぞれのカーネルIDとともにリスナによって受け取られたメッセージ.

In[8]:=
Click for copyable input
ParallelEvaluate[$KernelID -> l["Message", All]]
Out[8]=

交信のダイアグラム.

完全なWolfram言語入力を表示する
In[9]:=
Click for copyable input
ParallelEvaluate[$KernelID -> l["Message", All]]; Graph[Flatten[Thread /@ %], VertexShape -> spikey, VertexSize -> .5]
Out[9]=

関連する例

de en es fr ko pt-br ru zh