gpt4 book ai didi

concurrency - 文件服务器 erlang 响应

转载 作者:行者123 更新时间:2023-12-02 05:49:22 24 4
gpt4 key购买 nike

我正在尝试遵循 Joe Armstrong 的 Programming Erlang, Software for a concurrent world 中给出的第一个示例。这是代码:

-module(afile_server).
-export([start/1,loop/1]).

start(Dir) -> spawn(afile_server,loop,[Dir]).


loop(Dir) ->

receive
{Client, list_dir} ->
Client ! {self(), file:list_dir(Dir)};
{Client, {get_file, File}} ->
Full = filename:join(Dir,File),
Client ! {self(), file:read_file(Full)}
end,
loop(Dir).

然后我在 shell 中运行:

c(afile_server).
FileServer = spawn(afile_server, start, ".").
FileServer ! {self(), list_dir}.
receive X -> X end.

在书中,文件列表按预期返回,但在我的 shell 中,程序似乎已卡住。没有任何返回,但程序仍在运行。我对 erlang 一点都不熟悉,但是我可以理解它应该如何工作。

我在 Windows 7 64 位中运行它。该目录不为空,因为它包含一堆其他 erlang 文件。

最佳答案

那么... start/1 函数在这里做什么?它正在生成一个从 loop/1 开始的进程,您不仅可以在 shell 中运行它,还可以生成它!因此,您有两个生成的进程链,FileServer 下的进程立即终止,因为它唯一的工作是生成您不知道 pid 的实际文件服务器。

只需换行:

FileServer = spawn(afile_server, start, ".").

到:

FileServer = afile_server:start(".").

关于concurrency - 文件服务器 erlang 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27592388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com