- 博客(26)
- 收藏
- 关注
原创 使用ets和dets,dict和dets
编写一种键->值存储,让它把较小的值放入内存,把较大的值放入磁盘。制作一个适配器模块来实现它,并让这个模块与本章前面的适配器具有相同的接口。1 使用dict存数据。2 使用ets存数据。
2024-09-14 00:19:38 229
原创 erlang:练习-使用dets
(1) 扩展adapter_db1里的适配器,使调用adapter_db1:new(persistent)能创建一个持久性数据存储的元组模块。使用 atom_concat 函数将当前模块名和 Pid 连接成表名,
2024-09-11 23:55:04 116
原创 erlang表意编程
可以看出不知道字典里是否有这个键,因为代码模式匹配了lookup的所有返回值{ok, Val}和not_found。用lookup编写的代码会比用fetch、search和is_key三者之一编写的代码更难以理解和维护。与其猜测意图和分析代码,不如调用一个能显式表达三种意图之一的库方法。lookup 有三种不同的用途:数据检索、搜索和测试某个键是否存在。无需猜测和分析程序,函数名就能清楚表达意图。用来从字典里提取带有已知键的项,如果不存在就会报错。测试字典里是否存在特定的键, 拿到值却不使用。
2024-09-11 00:06:13 117
原创 erlang编程术语(二)
有两个或多个功能相近的库,但无法决定要用哪一个。这些库可能具有相似的函数接口,但性能特征不同。能够在多种不同实现方式做选择。将dict和list两种不同的实现方式存在一个元组里,通过第二个字段原子类型来区分实现方式,接口通用且互不干扰。状态和模块名封装到一起,隐藏信息和创建适配器模块。新版本不支持元组模块。
2024-09-09 23:44:52 244
原创 erlang编程术语
网络请求获取文件,需要对请求进行复杂处理,得到文件请求,同时不同的协议数据不同,非常复杂,而我们只是想处理获取文件的请求,可以使用中间人进程插入到中间,它只负责把网络请求装换成文件请求,极大简化了设计。term_to_binary(Term)和逆函数binary_to_term(Bin)对所有请求消息和返回消息进行加密压缩和解压,让所有通信变成同一种数据格式。有一种通用的格式就足够了。一切消息都使用Erlang数据类型。不需要那么多各不相同的客户端口服务器请求和响应编码,消息统一化来解决多种问题。
2024-09-07 00:32:41 135
原创 opt:application相关练习(二)
prime_queue_server添加到prime_tester_supervisor的监控下。制作一个队列服务器来把请求加入队列, prime_queue_server来处理请求。
2024-09-05 23:15:05 159
原创 opt:application相关练习(一)
制作由10个质数测试服务器组成的进程池。制作一个队列服务器来把请求加入队列,直到其中一个质数测试服务器处于空闲状态为止。当质数测试服务器空闲时,向它发送一个请求来测试某个数字是否是质数。制作一个名为 prime_tester_server 的gen_server,让它测试给定的数字是否是质数。把它添加到sellaprime_supervisor.erl的监控树里。原因分析:sellaprime_supervisor修改没有重新编译。在应用监控器下添加此监控器。修改监控树和app配置。尝试使用判断质数出错。
2024-09-04 23:09:57 230
原创 erlang日志和读取
提供shell输出,又能把写入shell的所有信息复制到一个滚动日志文件,最大文件大小是10MB,超过内容会滚动覆盖。日志写入文件和读取有问题,不能成功写入文件。只让错误记录器报告错误。
2024-09-03 23:20:12 178
原创 erlang:监控树
如果一个监控器在Time秒内执行了超过MaxRestarts次重启,那么这个监控器就会终止所有工作进程然后退出。这是为了防止出现一种情形,即某个进程崩溃、被重启,然后又因为相同原因崩溃而形成的无限循环。supervisor行为用一个回调模块作为参数,里面指定了监控策略以及如何启动监控树里的各个工作进程。它定义了监控器用于启动工作器的函数,将被用作apply(Mod, Fun, ArgList)的参数。这是被监控进程的类型。这是一个原子类型的标签,将来可以用它指代工作进程(如果有必要的话)。
2024-08-30 21:10:05 278
原创 erlang学习-5-otp
当我们需要添加一个新功能接口allname时,写新的nameserver。不能将name_server作为回调模块,服务器名已经硬编译进这个模块。添加热代码交换,发送消息实现。通过热更新修改回调模块。
2024-08-14 23:16:31 167
原创 erlang学习-4-gen_server
通过修改导入的server模块,就能修改非函数行为。回调函数和客户端调用的接口写在一起。手动模拟handle出错。写一个错误处理的服务器。
2024-08-13 22:41:29 181
原创 erlang学习-2-并发
如果在面积函数添加超时2000毫秒,超过此时间没接收消息,进程就会终止,rpc中访问会等不到消息回复,针对发送消息程序创建异步处理,结果自身没发出消息,超时处理可以防止进程资源浪费。通过使用spawn创建进程,服务器port传递参数,处理请求(每个请求一个进程),对于实时性要求不高的抛出事件处理。超时值为0的接收,会立即进入超时部分,但会先读取一次消息队列,每个进程都有自己的进程邮箱, 先进先出。尝试定时器,还没完全理解。从结果上看满足先进先出。
2024-08-10 00:14:27 201
原创 erlang学习-1-并发
打印结果成功,下一行是什么?Msg 这个表达式的值被定义为Msg。把spawn和rpc隐藏,服务器代码改动不影响客户端代码。在此代码中发送消息的进程和接收处理消息的进程是同一个。是传递给函数的参数列表,Pid是进程标识。rpc函数帮助我们发送请求并等待响应。是要执行函数的Erlang模块名,进程处理结果怎么返回发送消息进程?是要在新进程中执行的函数名,计算面积的函数area/1。防止接受到其他进程发的消息。转换为接受消息的进程。
2024-08-08 21:43:50 187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人