Scala Actors中的“ eventloop”函数有什么作用?

问题描述

|
eventloop
函数在Scala Actors中起什么作用,它有什么用?     

解决方法

        
eventloop
的工作方式与
loop
react
的组合相似。
loop
eventloop
之间的区别在于,
loop
实际上不会递归调用主体(以防止基于线程的actor发生堆栈溢出),而是安排处理(反应/接收)邮箱中的下一条消息,并且完成抛出异常的当前处理程序的执行,以清除调用堆栈。
eventloop
使用
react
递归处理消息-在
react
的情况下,它是安全的(并且堆栈不会溢出),因为ѭ3body的主体(但不是
receive
!)总是以异常结尾,在大多数情况下,并计划下一个循环,以确保所有参与者都能公平地访问线程池。因此,
eventloop
仅可用于事件驱动的actor。
import scala.actors._
import Actor._

class EventLoop extends Actor {
   def act = eventloop{
      case msg => println(\"Received \" + msg)
   }
}
    ,        也许这个线程可以给出一些细节:   演员的一个重要动机是他们允许您   避免控制反转,这意味着最多有一个线程   一次在演员内部执行,用户选择何时   通过编写等待的直线程序来实现   控制流中显式点的消息。      在这种模型中,通常希望避免将回调函数传递给其他异步调用它们的线程。相反,其他线程应仅通过向参与者发送消息来与参与者交互。如果需要类似回调的行为,则可以通过以下模式实现   以线程安全的方式:
  def eventloop() { 
    react { 
      case Event1 => 
        // handle Event1 
        eventloop() 
      ... 
      case Eventn => 
        // handle Eventn 
        eventloop() 
    } } 
  此模式在ѭ15中作为抽象操作提供:
  import scala.actors.Actor._ 

  eventloop { 
    case Event1 => 
      // handle Event1 
    case Eventn => 
      // handle Eventn 
  } 
  请注意,不再需要对某些封闭函数进行尾部调用。 话虽如此,考虑到线程的日期是2008年,并且Scala Actor API指南没有一次提到“ 0”,也许这不是经常使用。 Vasil Remeniuk在回答(+1)中熟练地详细说明了“ 0”的用法,并在问题“带有Scala actors的客户端-服务器示例”中给出了具体示例。