当前位置: 首页 > news >正文

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)操作才行

请添加图片描述

请添加图片描述

请添加图片描述

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • day-48 分割回文串
  • 1037 计算数列和
  • tcp如何保证可靠性传输
  • 保研考研机试攻略(满分篇):第一章——技巧之巅(2)
  • linux进程处理
  • Shader学习笔记
  • C#中的Array.Sort()和Reverse()
  • JAVA-JVM 内存模型类加载器GC算法GC调优
  • 【技巧】Excel检查单元格的值是否在另一列中
  • LuaJit分析(一)LuaJit交叉编译
  • 今日算法:蓝桥杯基础题之“切面条”
  • VS2022出现C1001内部编译器错误的情况分析
  • 性能测试⼯具-——JMeter
  • 关于位结构体及位操作总结
  • 项目拆解:短视频冷门赛道—ai绘画+温馨小屋,引流变现全攻略
  • 【译】JS基础算法脚本:字符串结尾
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 2017-09-12 前端日报
  • Android框架之Volley
  • CSS居中完全指南——构建CSS居中决策树
  • EOS是什么
  • java中具有继承关系的类及其对象初始化顺序
  • leetcode46 Permutation 排列组合
  • leetcode98. Validate Binary Search Tree
  • Node + FFmpeg 实现Canvas动画导出视频
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • yii2权限控制rbac之rule详细讲解
  • 从伪并行的 Python 多线程说起
  • 代理模式
  • 关于extract.autodesk.io的一些说明
  • 聊聊sentinel的DegradeSlot
  • 我的zsh配置, 2019最新方案
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 责任链模式的两种实现
  • 字符串匹配基础上
  • 湖北分布式智能数据采集方法有哪些?
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​插件化DPI在商用WIFI中的价值
  • #QT(串口助手-界面)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $.ajax()
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (回溯) LeetCode 46. 全排列
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (三分钟)速览传统边缘检测算子
  • (算法二)滑动窗口
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Windows2003安全设置/维护
  • (转)负载均衡,回话保持,cookie
  • .NET CLR Hosting 简介