js-cspは試し始めることができます
4349 ワード
CSPの使用例
CSPの使い方は最初はGo言語から伝わったので、私がネットから盗んだコードを見てみましょう.
そのうち
CSPの使い方は最初はGo言語から伝わったので、私がネットから盗んだコードを見てみましょう.
package main
import "fmt"
func ping(pings chan
そのうち
channel .
goroutine ,
channel , .
"go channel" .
Goのほか、ClojureはCSPのサポート、つまりcore.async
というライブラリを し、Clojureでは を し、>!
, ,
, >!
と , channel :
になりました(let [c1 (chan)
c2 (chan)]
(go (while true
(let [[v ch] (alts! [c1 c2])]
(println "Read" v "from" ch))))
(go (>! c1 "hi"))
(go (>! c2 "there")))
この では(chan)
がchannelを し、go
で3つの がかりを します...while true
を いるが、alts!
を しても が する. 「core.async」を すると つかります.
なぜCSPを うのか
Wikiを るhttps://en.wikipedia.org/wiki...
In computer science, communicating sequential processes (CSP) is a formal language for describing patterns of interaction in concurrent systems.[1] It is a member of the family of mathematical theories of concurrency known as process algebras, or process calculi, based on message passing via channels. CSP was highly influential in the design of the occam programming language,1 and also influenced the design of programming languages such as Limbo[3] and Go.[4]
CSPは 、 のシステム でどのように するか、すなわちGoにおける を するために いられる.コンカレントの は であるため、CSPは の にも する. も な はChannelで、“パイプ”とも ばれて、Channelはデータを するために いることができて、そのためパイプの み きに する があって、それぞれtake!
とput!
で、Clojureの の び です. のように、パイプはコードの をブロックするように える、すなわち、 み りと き みを つことができる.これにより、ネットワークデータをキャプチャして するなど、いくつかのシーンをシミュレートすることができ、 に くことができます.
な はalts!
で、Goに するselect
は、 のチャネルが に されたデータを り、またmerge
がはっきり えていないので、 のチャネルが されたデータをまとめたようで、1つになりますか? のfilter,mapなどのシーケンスの は,チャネル でも に する ,CSPは されているはずであり, の はそれだけではない. えば、(timeout 1000)
のようなチャネルが1 って ってくるデータを やしたり、チャネルに してBufferを う や、 のプッシュデータなどがある.
に こえますが、アニメが されていればよくわかりますが、まだ つかっていません... な え から えば、これは に する であり、 くの を するために することができる.もう し しく しましょう.JavaScriptの を します.
js-cspの
Node 6にはyield
があり、 コードで で くことが になったため、js-csp
というモジュールがあり、yieldでCSPの を した.asyncを ったものも たが、 えないと うが、 に する.
https://github.com/ubolonton/...https://github.com/dvlsg/asyn...
は READMEの の を って、 で できるかどうかを ます.function* player(name, table) {
while (true) {
var ball = yield csp.take(table); //
if (ball === csp.CLOSED) { //
console.log(name + ": table's gone");
return;
}
ball.hits += 1;
console.log(name + " " + ball.hits);
yield csp.timeout(100); //
yield csp.put(table, ball); //
}
}
csp.go(function* () {
var table = csp.chan(); // Channel
csp.go(player, ["ping", table]); // goroutine
csp.go(player, ["pong", table]); // goroutine
yield csp.put(table, {hits: 0}); //
yield csp.timeout(1000); //
table.close();
});
の は のとおりです.=>> node go.js
ping 1
pong 2
ping 3
pong 4
ping 5
pong 6
ping 7
pong 8
ping 9
pong 10
ping: table's gone
pong: table's gone
このようなシミュレーションは、2つのプロセス で いにデータを シーンである.
しかし、 にCSPはイベントフローを することができ、より な を ることができる.これが が にお めしたこの の です.http://jlongster.com/Taming-t...
ブラウザとノードのyieldサポートが するにつれて、js-cspを することはすでにできる. の を えると、 く る があると います.
Rxとの
イベントフローのもう つの なスキームはRxであり、jsバージョンのRxjsがある. 、RxはOOP でカプセル されたFPスタイルの プログラミング で、 が いが、CSPはパイプラインを じて だが すぎる を している.コミュニティの を ると、 には きな がある. はまだ しいが... はいくつかの を めました.
https://medium.com/@puppybits...
GitHubの もあります
https://github.com/ubolonton/...https://github.com/cyclejs/cy...
また、ある がRxでCSP を たブログもあります.
http://swannodette.github.io/...http://swannodette.github.io/...http://potetm.github.io/2014/...http://potetm.github.io/2014/...
そういえば はまだこれをあまり していません.しかし、 の のDemoを たことがあるならば、あなたはきっと で、ストリームはデータと が られて された で、 のプログラミング は しにくいが、CSPの はChannelで されたデータを するのに に なことになった. のコミュニティのコメントを にして、これはかなりの を つ なので、フォローし けています.