erlang学习:用OTP构建系统23.12练习题

2024-09-04 08:36

本文主要是介绍erlang学习:用OTP构建系统23.12练习题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

练习要求

制作一个名为prime_tester_server的gen_server,让它测试给定的数字是否是质数。
你可以使用lib_primes.erl里的is_prime/2函数来处理(或者自己实现一个更好的质数测试函
数)。把它添加到sellaprime_supervisor.erl的监控树里。

质数判断server实现

-module(prime_tester_server).
-behaviour(gen_server).-export([start_link/0]).
-export([test_prime/1]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,terminate/2, code_change/3]).%% 初始化
init(_Args) ->{ok, []}.%% 处理调用请求
handle_call({test_prime, Number}, _From, State) ->is_prime(Number),{reply, {ok, is_prime(Number)}, State}.%% 处理消息投递
handle_cast(_Msg, State) ->{noreply, State}.%% 处理信息
handle_info(_Info, State) ->{noreply, State}.%% 终止回调
terminate(_Reason, _ServerState) ->ok.%% 版本变更回调
code_change(_OldVsn, State, _Extra) ->{ok, State}.%% 启动服务器
start_link() ->gen_server:start_link({local, prime_tester_server}, ?MODULE, [], []).%% 测试质数
test_prime(Number) ->gen_server:call(prime_tester_server, {test_prime, Number}).%% 质数检测函数
is_prime(Number) when Number < 2 -> false;
is_prime(2) -> true;
is_prime(Number) ->lists:all(fun(X) -> Number rem X =/= 0 end, lists:seq(2, trunc(math:sqrt(Number)))).

监控树实现

-module(sellaprime_supervisor).
-behaviour(supervisor).
-export([start_link/0, init/1]).start_link() ->supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init(_) ->ChildSpecs = [% 添加 prime_tester_server 到监督树{tag1,{prime_tester_server, start_link, []},permanent,10000,worker,[prime_tester_server]}],{ok, {{one_for_one, 5, 10}, ChildSpecs}}.

测试结果

请添加图片描述

请添加图片描述
能够正常启动监控树与服务器,但是在进行报错测试后,之后服务器没有正常重启

-module(sellaprime_supervisor).
-behaviour(supervisor).
-export([start_link/1, init/1,test/0]).test() ->{ok, Pid} = supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = []),unlink(Pid).
start_link(Args) ->supervisor:start_link({local, ?MODULE}, ?MODULE, Args).
init(_) ->ChildSpecs = [% 添加 prime_tester_server 到监督树{prime_tester_server,{prime_tester_server, start_link, []},permanent,10000,worker,[prime_tester_server]}],{ok, {{one_for_one, 5, 10}, ChildSpecs}}.

查找了很久,需要在监控树中进行unlink(Pid)操作才行

请添加图片描述

请添加图片描述

请添加图片描述

修改后就能重启了,与预期相符

这篇关于erlang学习:用OTP构建系统23.12练习题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135521

相关文章

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization