分散関数呼び出し
Posted feedbacks - Scala
ScalaでActorを使って。
そもそも非同期に使うのがメインなものなので、同期でやるなんて初めてでした。!?とreplyを使うと同期でメッセージを送受信できます。
が・・・直列で使うと遅いですね。
- CPU:Athlon 3000+
- RAM: 1G
- 同一ホスト
で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)
}
|



沢渡 みかげ
#3401()
Rating0/0=0.00
[ reply ]