- 博客(36)
- 收藏
- 关注
原创 Linux基本命令操作
是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。命令的选项,用于启用或关闭命令的某个或某些功能,是可选的。命令执行的参数,表示命令的作用对象,如文件名,用户名等,也是可选的。
2023-12-14 23:43:04
920
原创 实现使用监管者让其中一个进程重起十次
首先,你需要定义一个购买进程的行为。这可以通过定义一个模块并实现gen_server行为模式来完成。ok.这个模块实现了gen_server行为模式,并定义了一个start_link/1函数来启动购买进程。init/1函数初始化状态,包括剩余的尝试次数。函数处理消息,这里我们简单地减少剩余尝试次数。如果尝试次数用完,购买进程应该被终止。接下来,我们需要定义一个supervisor的行为。Supervisors用于启动、监视和管理子进程。
2023-12-13 23:44:54
381
原创 ets:tab2list的不足之处与替代方法,以及gen_server中使用ets的优缺点
是 Erlang/OTP 中的一个函数,用于将 ETS(Erlang Term Storage)表转换为列表。ETS 是 Erlang 中的一个内建数据库,允许开发者在内存中存储大量数据。
2023-12-13 02:24:01
974
原创 在gen_server使用ets实例演示
Erlang的ETS(Erlang term storage)是一种在内存中存储数据的结构,类似于其他语言中的数据库。它允许你在Erlang程序中存储和检索数据。gen_server是Erlang中用于创建服务器的一种模式,它能够处理并发的客户端请求。以下是在gen_server首先,我们可以在gen_server的init函数中使用在这个例子中,我们创建了一个新的ETS表,并将其命名为"state"。
2023-12-11 23:53:29
507
原创 erlang实现用ets做一级缓存
在这个例子中,我们创建了一个名为"cache"的ETS表,并实现了五个函数:start/0、stop/0、get/1、put/2和update/3。stop/0函数用于删除ETS表。update/3函数用于更新ETS表中给定键的值,如果键不存在则插入新的键值对,如果键已存在则将旧值和新值相加并更新。当请求获取一个键的值时,如果该键不存在于ETS表中,我们将从DETS表中检索该键的值,并将其添加到ETS表中。如果需要更新某个键的值,我们直接向ETS表中插入新的值,并在DETS表中删除该键(如果有必要)。
2023-12-10 22:02:10
398
原创 Elang之ETS系列函数功能与用法详解
导表时,一些关于表的必须的信息被导到头部,这些信息包括表的类型,名字,访问权限,大小,版本和是否是已命名表,同事还有关于教导文件中的一些扩展信息相关的注释,这些可以使文件中的对象数或者是头部和文件中record的MD5值。跟 ets:select/2 一样,都是根据匹配规范匹配表里的对象数据,不过如果是 ordered_set 类型的 ETS 表的话会返回一个倒序的列表,其他类型的表返回的值跟 ets:select/2 一样。返回一个以{Item, Value}元祖形式的列表的ETS表的信息。
2023-12-10 21:25:08
1103
原创 套接字应用程序
这章节是关于实现lib_chan库的。lib_chan的代码在之上实现了一个完整的网络层,能够提供认证和Erlang数据流功能。一旦理解了lib_chan的原理,就能量身定制我们自己的通信基础结构,并把它叠加在TCP/IP之上了。就lib_chan本身而言,它是一种构建分布式系统的有用组件。
2023-12-05 22:40:32
944
原创 OTP模板
一:通用服务器模版将在本文中列出supervisor和的完整模板清单。这些模板内建于Emacs模式,这样便于直接使用和学习。一:通用服务器模版。
2023-12-04 23:16:06
360
原创 用Mnesia为cache增加分布式支持
在设计分布式程序时,可供选择的通信方式主要有两种:异步通信和同步通信。采用异步通信时,发送方无须等待任何确认或应答。而在采用同步通信时,发送方会处于挂起状态,直至收到回复为止((即便只是“收到,多谢”之类的确认性回复)。Erlang消息传递的基本形式就是异步的,因为这种形式最为简单灵活:一般来说异步通信更适合分布式编程,而且同步通信总可以利用成对的异步请求/响应消息来模拟(就是这样做的)。
2023-12-04 01:04:50
987
原创 Erlang/OTP中的日志与事件处理
日志功能是构筑在Erlang的事件处理框架之上的,而该框架又以gen_event行为模式为基础。该行为模式为事件处理器封装了简单易用的接口。要想进一步调整Erlang/OTP的日志框架,就得编写新的gen_event行为模式的实现模块。gen_event行为模式接口与gen_server的类似:其中包含你所熟悉的init和terminate回调函数,也包含和回调。不过gen_event接口用取代了,这儿正是你接收错误日志事件的地方。gen_server和gen_event回调模块的使用。
2023-11-30 23:44:00
968
原创 创建OTP应用的基本骨架到实现缓存
应用结构的搭建分为一下几个步骤:(1)创建标准应用目录布局;(2)编写文件(3)编写应用行为模式实现模块,即(4)实现顶层监督者,即。
2023-11-29 22:52:05
1063
原创 OTP应用与监督机制
浅显地说,OTP应用无非就是一组相互关联的代码。我们将其中一部分称为库应用:这些应用纯粹是供其他应用调用的一系列模块的集合。(Erlang/OTP的stdlib就是库应用的一个实例。)还有一些应用则更为常见,它们具有自己的生存周期,启动之后会运行上一段时间,最后终止。我们将这类应用称为主动应用。每个主动应用都配有一个负责对应用进程进行管理的根监督者。
2023-11-28 22:17:00
879
原创 开发基于TCP的RPC服务
该RPC服务器会并接受来自外来TCP客户端的连接。建立连接之后,客户端将可以通过TCP之上的简易ASCII文本协议执行函数调用。下图展示了该RPC服务器的设计和功能:注:RPC服务器进程通过套接字与外界相连。它通过TCP接收和执行请求,并将结果返回给客户端。该图展示了两个进程。一个是;由它派生出实际的RPC服务器进程。第二个进程会等待其他人的连接。当连接到来时,它会从连接上读取描述的ASCI文本,并在执行调用后将结果通过TCP流返回。这类功能在很多场合都能派上用场,包括在紧要关头下的远程管理和诊断。
2023-11-27 21:27:18
828
1
原创 Mnesia:Erlang数据库
在做任何事之前,必须先创建一个Mnesia数据库。这件事只需要做一次。会在NodeList(它必须是一个包含有效Erlang节点的列表)里的所有节点上都初始化一个新的Mnesia数据库。这个案例给出的节点列表是[node()],也就是当前节点。Mnesia完成初始化并创建了一个名为的目录结构来保存数据库。然后退出Erlang shell,用操作系统的ls命令进行验证。/home/joe/some/path/to/Mnesia.company是将要保存这个数据库的目录。
2023-11-26 22:16:56
949
1
原创 用WebSocket和Erlang 进行浏览
下图展示了一个运行在浏览器里的时钟。所有无关的浏览器窗口细节,比如菜单、工具栏和滚动条都没有显示出来,这样我们就能把注意力集中在代码上。这个应用程序的关键部分是显示界面,它里面的时间会每秒钟更新一次。从Erlang的角度看,整个浏览器就是一个进程。因此,为了把时钟更新为之前显示的值,Erlang浏览器收到fill_div后就把它转换成JavaScript命 令,后者随即把指派的字符串作为内容填充到div中。
2023-11-23 23:47:35
1061
原创 ETS 和 gen_server 的使用
ETS和DETS表保存的是元组。元组里的某一个元素(默认是第一个)被称为该表的键。通过键来向表里插入和提取元组。当我们向表里插入一个元组时会发生什么,取决于表的类型和键的值。一些表被称为set,它们要求表里。另一些被称为同键表bag,它们允许。ets有4种类型的table,如表所示:基本的表类型(异键表和同键表)各有两个变种,它们共同构成四种表类型:异键、有序异键(ordered set)、同键和副本同键(在异键表里,各个元组里的键都必须是独一 无二的。
2023-11-22 23:20:33
62
原创 Erlang套接字编程(下篇)
UDP是一种无连接协议,意思是客户端向服务器发送消息之前不必建立连接。这就意味着UDP非常适合那些大量客户端向服务器发送简短消息的应用程序。用Erlang编写UDP客户端和服务器要比编写TCP程序简单得多,因为我们无需担心服务器连接的维护工作。
2023-11-21 23:34:45
38
1
原创 Erlang 文件编程(上篇)
data1.dat包含一个由各种Erlang数据类型组成的序列,可调用来读取所有的假定File包含一个由Erlang数据类型组成的序列。如果它能读取文件里的所有数据类型,就会返回{ok, [Term]},否则会返回。
2023-11-16 23:38:05
63
1
原创 Erlang并发程序中的错误
错误处理的理念相对于顺序程序,处理并发程序里的错误涉及一种完全不同的思考方式。设想一个只有单一顺序进程的系统。如果这个进程挂了,麻烦可能就大了,因为没有其他进程能够帮忙。出于这个原因,顺序语言把重点放在故障预防上,强调进行防御式编程。在Erlang里,我们有大量的进程可供支配,因此任何单进程故障都不算特别重要。通常只需编写少量的防御性代码,而把重点放在编写纠正性代码上。我们采取各种措施检测错误,然后在错误发生后纠正它们。
2023-11-14 22:11:31
57
原创 Erlang的编译和运行程序
开始用Erlang编程时,多半会把所有的模块和文件放在同一个目录里,然后从这个目录启动Erlang。如果这么做,Erlang的载入器可以百分百找到你的代码。但是,随着程序变得越来越复杂,你会想要把它们分成多个易于管理的区块,并把代码放进不同的目录里。另外,当你想要包含来自其他项目的代码时,这些外部代码会有自己的目录结构。1.设置载入代码的搜索路径Erlang的运行时系统使用一种。要让它能正确工作,必须来找到正确版本的代码。这种代码自动载入机制实际上是用Erlang编写的,
2023-11-10 22:56:23
715
1
原创 Erlang顺序编程杂项集(下篇)
Erlang当Erlang的预处理器epp碰到一个?MacroName形式的表达式时,就会展开这个宏。宏定义里出现的变量会匹配对应宏调用位置的完整形式。另外还有一些预定义宏提供了关于当前模块的信息。列举如下:(1)?FILE 展开成当前的文件名;(2)?MODULE 展开成当前的模块名;(3)?LINE 展开成当前的行号。
2023-11-08 23:07:46
116
1
原创 【MySQL数据库基础知识进阶 三:MySQL - Date/Time函数】
microsecond()函数n用于从给定的日期时间或时间获取微秒的值。addtime()函数用于获取添加了一些时间间隔的时间/日期时间值。timediff()函数用于获取给定的两个时间/日期时间之间的时差。date_add()函数用于获取添加某些日期/日期时间间隔的日期。subtime()函数用于获取被某些时间间隔减去的时间/日期时间。MySQL日期/时间函数用于操纵时间值。month()函数用于从给定的日期时间或时间获取month的值。adddata()函数用于获取添加一些时间/日期间隔的日期。
2023-07-22 18:48:15
122
原创 【MySQL数据库基础知识进阶 一 :MySQL 查询数据的sql语句】
MySQL 数据库使用SQL SELECT语句来查询数据。你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据。
2023-07-22 18:44:59
326
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人