yuin #2238(2007/08/16 15:35 GMT) [ Scala ] Rating0/2=0.00
ScalaでActorを使って。
そもそも非同期に使うのがメインなものなので、同期でやるなんて初めてでした。!?とreplyを使うと同期でメッセージを送受信できます。
が・・・直列で使うと遅いですね。
で21218 msでした。直列に呼び出すなら素直にRMI使ったほうがいいですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
import scala.actors._ import scala.actors.Actor._ import scala.actors.remote._ import scala.actors.remote.RemoteActor._ import java.io.ByteArrayOutputStream val PORT = 9010 if(args.length>0 && args(0) == "server") { //server side println("server:start") actor { alive(PORT) register('pricestring, self) loop { react{ case (price:int, p:int) => val s = new ByteArrayOutputStream Console.withOut[unit](s){ printf("\u8ca9\u58f2\u4fa1\u683c {0}\u5186\uff08\u5b9a\u4fa1{1}\u5186\u304b\u3089{2}%\u5f15\u304d\uff09", (price*(1-p.toFloat/100)).ceil, price, p) } reply(s.toString) } } } }else { //client side val clientActor = actor { val c = select(Node("127.0.0.1", PORT), 'pricestring) loop { react { case r@(i:int,j:int) => reply((c!?r)) } } } import scala.testing.Benchmark val test = new Benchmark { def run:unit = { var i = -1;while({i= i+1; i<10000}) { clientActor !? ((2000, 20)) } return () } } println(test.runBenchmark(1)(0)+" ms") System.exit(0) }
Rating0/2=0.00-0+
[ reply ]
yuin
#2238()
[
Scala
]
Rating0/2=0.00
ScalaでActorを使って。
そもそも非同期に使うのがメインなものなので、同期でやるなんて初めてでした。!?とreplyを使うと同期でメッセージを送受信できます。
が・・・直列で使うと遅いですね。
で21218 msでした。直列に呼び出すなら素直にRMI使ったほうがいいですね。
import scala.actors._ import scala.actors.Actor._ import scala.actors.remote._ import scala.actors.remote.RemoteActor._ import java.io.ByteArrayOutputStream val PORT = 9010 if(args.length>0 && args(0) == "server") { //server side println("server:start") actor { alive(PORT) register('pricestring, self) loop { react{ case (price:int, p:int) => val s = new ByteArrayOutputStream Console.withOut[unit](s){ printf("\u8ca9\u58f2\u4fa1\u683c {0}\u5186\uff08\u5b9a\u4fa1{1}\u5186\u304b\u3089{2}%\u5f15\u304d\uff09", (price*(1-p.toFloat/100)).ceil, price, p) } reply(s.toString) } } } }else { //client side val clientActor = actor { val c = select(Node("127.0.0.1", PORT), 'pricestring) loop { react { case r@(i:int,j:int) => reply((c!?r)) } } } import scala.testing.Benchmark val test = new Benchmark { def run:unit = { var i = -1;while({i= i+1; i<10000}) { clientActor !? ((2000, 20)) } return () } } println(test.runBenchmark(1)(0)+" ms") System.exit(0) }Rating0/2=0.00-0+
[ reply ]