【发布时间】:2014-05-30 23:55:47
【问题描述】:
我习惯于请求处理程序在线程上运行的语言,因此所有 I/O 函数都有一个异步版本以防止阻塞线程。
在 Elixir 中,每个请求都在一个轻量级进程(actor?)中处理,并且运行时可以在单个 OS 线程上多路复用数千个 actor。如果一个actor阻塞,运行时会交换另一个actor来使用cpu。由于参与者可以在不阻塞线程的情况下阻塞,所以我看不到 Elixir 中异步函数的意义。然而,我在 HTTPotion 文档中发现了这一点:
iex> HTTPotion.get "http://floatboth.com", [], [stream_to: self]
%HTTPotion.AsyncResponse{id: {1372,8757,656584}}
这里的异步函数有什么意义?
【问题讨论】:
-
我只是在这里猜测,但我认为异步 API 的好处是可以逐步处理较长的响应块。您不必等待整个响应的到来,而是可以在每个块消息到达时对其进行操作。
标签: http asynchronous actor elixir