其实在业界中,Netty已经成为了企业中分布式通信的一个标准了,因为它能够高效地应对分布式海量并发编程
另外基于Scala的Actor,有一个并发编程框架,Akka
其实NIO的本质和精髓在于异步!!!
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个线程,假如你处理的事情是非常轻量级的,会非常浪费资源
这个时候要进行线程复用,怎么办?
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"
}
}
可以看看以上程序的运行结果
也可以这样写:
class HiScalaActor extends Actor {
override def act() = {
loop {
react {
case "Scala" =>
println(Thread.currentThread().getId)
}
}
}
}
NIO就是精妙地运用了线程复用的技术
现在的并发编程=消息系统+线程复用
归纳总结:1.Actor,Akka,Netty
2.通过实例理解Actor背后的原理
3.现代的并发编程