第25课:Scala并发编程实战进阶

2016-08-17  本文已影响0人  fatj

其实在业界中,Netty已经成为了企业中分布式通信的一个标准了,因为它能够高效地应对分布式海量并发编程
另外基于Scala的Actor,有一个并发编程框架,Akka
其实NIO的本质和精髓在于异步!!!

}A5V@W_KUIZDMBT@F2KWK@J.png
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.现代的并发编程

cccc.png
上一篇下一篇

猜你喜欢

热点阅读