首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数"eventloop“在Scala执行元中做什么?

函数"eventloop“在Scala执行元中做什么?
EN

Stack Overflow用户
提问于 2011-06-12 00:18:28
回答 2查看 966关注 0票数 7

eventloop函数在Scala Actors中做什么?它有什么用处?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-12 03:14:51

eventloop的工作原理类似于loopreact的组合。loopeventloop之间的区别在于,loop实际上并不递归地调用body (以防止基于线程的参与者的堆栈溢出),而是调度对来自邮箱的下一条消息的处理(反应/接收),并完成当前处理程序的执行,抛出一个异常,以清除调用堆栈。

eventloop使用react递归地处理消息-在react的情况下它是安全的(并且堆栈不会溢出),因为react的主体(而不是receive!)在大多数情况下,总是以异常结束,并安排下一个循环,以保证所有参与者对线程池的公平访问。因此,eventloop只能与事件驱动的参与者一起使用。

代码语言:javascript
复制
import scala.actors._
import Actor._

class EventLoop extends Actor {
   def act = eventloop{
      case msg => println("Received " + msg)
   }
}
票数 9
EN

Stack Overflow用户

发布于 2011-06-12 02:16:38

也许this thread可以给出一些细节:

actor的一个重要动机是,它们允许您避免控制反转,这意味着一次最多只有一个线程在actor内部执行,用户通过编写一个在控制流中显式点处等待消息的直线程序来选择何时执行。

在此模型中,人们通常希望避免将回调函数传递给异步调用它们的其他线程;相反,其他线程应该仅通过向参与者发送消息来与其交互。如果需要类似回调的行为,则使用以下模式以线程安全的方式实现:

代码语言:javascript
复制
  def eventloop() { 
    react { 
      case Event1 => 
        // handle Event1 
        eventloop() 
      ... 
      case Eventn => 
        // handle Eventn 
        eventloop() 
    } } 

此模式是作为Actor.eventloop中的抽象操作提供的:

代码语言:javascript
复制
  import scala.actors.Actor._ 

  eventloop { 
    case Event1 => 
      // handle Event1 
    case Eventn => 
      // handle Eventn 
  } 

请注意,不再需要对某些封闭函数进行尾部调用。

话虽如此,考虑到这个帖子可以追溯到2008年,而Scala Actor API guide一次也没有提到eventloop,也许这个词并不经常使用。

Vasil Remeniuk熟练地详细介绍了eventloophis answer (+1)中的用法,并在问题"Client-Server example with Scala actors“中给出了一个具体的例子。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6317053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档