`
derlang
  • 浏览: 35326 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

gen_server: handle_cast VS handle_info

阅读更多
http://www.trapexit.org/forum/viewtopic.php?p=44427

fuserlsrv采用gen_server behaviour,它是open_port的控制进程。

对从port来的消息,由fuserlsrv的回调函数handle_info处理,这里没有一个explicit request operation, 而是有gen_server自己进行消息派遣。

fuserldrv  ----> port   ----> fuserlsrv ----> Module:handle_info

handle_call处理显式调用gen_server:call产生的消息,同样,handle_cast处理显式调用gen_server:cast所产生的消息。不同的是,前者是同步的,后者是异步的。

详情可以参考gen_server的源码,也可以根据trace技术来了解程序的运行情况。Erlang在这些方面做的比较到位。

如此看来,fuserl的整个流程就比较清楚了。
首先mount fuse文件系统
后续针对该文件系统的所有操作,经过VFS机制,在fuse kernel module的辅助下,转到用户空间的fuserldrv进程(libfuse)。
fuserldrv把相应的请求通过fd 4发给port的控制进程,即fuserlsrv。


  • 大小: 19.4 KB
分享到:
评论

相关推荐

    gen_server:Erlang 的 gen_server 的(不完整的)OcamlAsync 实现

    gen_server通过定义handle_call、handle_cast和handle_info等回调函数,使开发者能够灵活地管理服务器的状态变化。 在OCaml/Async中,我们可以借鉴这些设计原则来构建一个类似的系统。Async库提供了异步编程的支持...

    gen_server tasting 之超简单名称服务(续)

    这些回调函数包括`init/1`、`handle_call/3`、`handle_cast/2`、`handle_info/2`、`terminate/2`和`code_change/3`。gen_server通过调用这些函数来处理来自客户端的请求,进行状态管理,并在需要时进行状态迁移。 `...

    gen_server tasting 之超简单名称服务

    4. `handle_info/2`: 处理其他消息,比如定时器触发或监控进程的状态变化。 5. `terminate/2`: 当服务器停止时,这个函数会被调用,用于清理资源。 6. `code_change/3`: 支持在运行时代码更新,接收旧版本的状态和新...

    gen_server tasting 之超简单名称服务(再续)

    首先,`gen_server` 提供了一套回调函数,包括`init/1`、`handle_call/3`、`handle_cast/2`、`handle_info/2`、`terminate/2` 和 `code_change/3`。开发者需要在自定义模块中实现这些函数,以定义服务器的行为。`...

    gen_udt:实现 UDT 协议的 Erlang 模块

    -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). init(Args) -> {ok, UdtSocket} = gen_udt:open(), {ok, {UdtSocket, Args}}. handle_call(Request, _From, ...

    Erlang实战

    例如,在 `handle_call/3` 中不要直接调用 `gen_server:call/2`,可以考虑使用 `gen_server:cast/2` 来异步处理消息。 ##### 3. gen_fsm详解 - **gen_fsm** 提供了一个框架用于实现有限状态机,适用于处理复杂的...

    自己写一个tcp 通用服务器

    server`行为:Erlang的`gen_server`行为提供了一种标准方式来实现服务器进程,它包含了一系列的回调函数,如`init/1`(初始化)、`handle_call/3`(处理同步调用)、`handle_cast/2`(处理异步消息)和`handle_info/...

    使用OTP原理构建一个非阻塞的TCP服务器

    在gen_server和gen_fsm中,我们需要定义各种回调函数,如`init/1`、`handle_call/3`、`handle_cast/2`、`handle_info/2`和`terminate/2`等。这些回调允许我们处理不同类型的事件和消息,如系统消息、用户自定义消息...

    Erlang的OOP功能

    send(Pid, Message) -> gen_server:cast(Pid, Message). handle_cast(Message, State) -> %% 处理消息的逻辑 {noreply, NewState}. ``` **4. 软类型和动态性** Erlang是动态类型的,这意味着类型检查发生在运行...

    Erlang进程池WorkerPool.zip

     handle_call/3, handle_cast/2, handle_info/2]). -dialyzer([no_behaviours]). %%%=================================================================== %%% callbacks %%%========================...

    Webserver:Erlang 中的一个简单的网络服务器

    `gen_server` 提供了一个标准的接口,包括 `start_link/3`(启动服务器并建立链接)、`handle_call/3`(处理同步调用)、`handle_cast/2`(处理异步消息)和 `handle_info/2`(处理其他信息)等回调函数。...

    ERLANG和PYTHON互通实现过程详解

    `handle_info/2`处理其他非预期的消息,这里没有特别的处理,所以返回{noreply, State}。 `terminate/2`在进程终止时清理资源,确保端口被正确关闭。 `code_change/3`处理代码更新,这是一个gen_server回调,但在...

    erlang实战IP查询服务

    - `handle_cast/2`: 处理异步消息。 - `terminate/2`: 在服务停止时被调用。 - `code_change/3`: 支持热更新(Hot code loading)。 #### 五、项目实施步骤 1. **环境搭建**: - 安装Erlang/OTP。 - 配置`$ERL_...

    echo-server-ex:使用Elixir lang的简单exho服务器

    5. **接收和发送数据** - 当`handle_info/2`接收到新连接时,我们需要接受连接(`:inet.accept(socket)`),并开启一个新的进程来处理这个连接。在新的进程中,我们可以用`:gen_tcp.recv(socket, 0)`来接收客户端的...

    opensc-0.12.0.tar.gz

    * Handle size_t printf with "%lu" and (unsigned long) cast * Add support for d-trust cards / improve micardo 2.1 driver New in 0.11.0; 2006-05-01; Andreas Jellinghaus * compile fixes/improvements for...

Global site tag (gtag.js) - Google Analytics