其實在業(yè)界中瓤逼,Netty已經(jīng)成為了企業(yè)中分布式通信的一個標(biāo)準了托启,因為它能夠高效地應(yīng)對分布式海量并發(fā)編程
另外基于Scala的Actor渊涝,有一個并發(fā)編程框架谎替,Akka
其實NIO的本質(zhì)和精髓在于異步6蟛恰4ぁ!
class HelloScalaActor extends Actor {
override def act()= {
while(true) {
receive {
case "Scala" =>
println(Thread.currentThread().getName)
}
}
}
}
object ConcurrentPrograming {
def main(args:Array[String]){
val actor=new HelloScalaActor()
actor.start()
println(Thread.currentThread().getName)
for( i <- 1 to 10)
actor ! "Scala"
}
}
從這里可以看到Actor背后其實就是一個線程
這里其實有一個問題窗宇,假如開10個Actor措伐,就有10個線程,假如你處理的事情是非常輕量級的军俊,會非常浪費資源
這個時候要進行線程復(fù)用侥加,怎么辦?
class HiScalaActor extends Actor {
override def act()= {
react {
case "Scala" =>
println(Thread.currentThread().getId)
act()
}
}
}
object ConcurrentPrograming {
def main(args:Array[String]){
// val actor=new HiScalaActor()
// actor.start()
// println(Thread.currentThread().getName)
for( i <- 1 to 100)
((new HiScalaActor).start) ! "Scala"
}
}
可以看看以上程序的運行結(jié)果
也可以這樣寫:
class HiScalaActor extends Actor {
override def act() = {
loop {
react {
case "Scala" =>
println(Thread.currentThread().getId)
}
}
}
}
NIO就是精妙地運用了線程復(fù)用的技術(shù)
現(xiàn)在的并發(fā)編程=消息系統(tǒng)+線程復(fù)用
歸納總結(jié):1.Actor,Akka,Netty
2.通過實例理解Actor背后的原理
3.現(xiàn)代的并發(fā)編程