自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 erlang (erlang 操作模块)学习笔记(四)

平均时间 此函数当前实现的复杂度为 O(1),最坏情况下的时间复杂度为O(N), 其中 N 是流程中的项数 字典。也就是说,is_process_alive/1 对于正在退出的进程返回 false,但其进程标识符是 part 从进程返回的结果/0。返回一个元组,该元组是参数 Tuple1 的副本,其中由整数参数 Index 指定的元素(第一个元素是索引为 1 的元素)替换为 argument 值。返回元组中的元素数或 二进制或位串中的字节,对于位字符串,将返回整字节数。返回调用进程的进程标识符。

2024-02-01 22:25:18 643

原创 erlang (erlang 操作模块)学习笔记(三)

如果 Map 不是映射,则调用失败并显示 {badmap,Map} 异常,如果没有值与 Key 关联,则调用将失败并显示 {badkey,Key} 异常。[0-9]+$“)。返回当前本地日期和时间,{{Year, Month, Day}, {Hour, Minute, Second}},时区和夏令时更正取决于 底层操作系统。返回其文本表示形式为 String 的引用,失败:badarg 如果 String 包含 bad 引用的表示形式。返回一个整数,其以 base 为单位的文本表示形式为 String,

2024-01-31 22:02:06 810

原创 erlang (erlang 操作模块)学习笔记(二)

如果指定了 option short,则格式化浮点数 以最少的位数,仍保证 F =:= list_to_float(float_to_list(F, [short])))。返回进程字典中与 Key 关联的值 Val,如果 Key 不存在,则返回 undefined。预计时间 此函数当前实现的复杂度为 O(1),最坏情况下的时间复杂度为O(N), 其中 N 是流程中的项数 字典。此函数与erlang/1,2,3的不同之处在于导致 不同类的例外情况,并且有理由 不包括调用中的函数列表 叠。

2024-01-30 21:36:39 1587

原创 erlang (erlang 操作模块)学习笔记(一)

返回一个新元组,该元组的元素比 Tuple1 多一个元素,并且包含 Tuple1 中的元素,后跟 Term 作为最后一个元素。平均时间 此函数当前实现的复杂度为 O(1),最坏情况下的时间复杂度为O(N), 其中 N 是流程中的项数 字典。如果二进制文件中的位数 不能被 8 整除,则列表的最后一个元素是位字符串 包含剩余的 1-7 位。返回一个整数,该整数是所需的字节数 包含位字符串。如果整个数据包包含在 Bin 中,则它是 与二进制文件的其余部分一起返回为 {ok,Packet,Rest}。

2024-01-29 21:41:06 685

原创 erlang (Lists 操作模块)学习笔记(三)

当两个 元素比较相等,List1 中的元素是 如果存在这样的元素,则选择,否则从 List2 中选择元素,删除另一个元素。“Zips”三个列表合并为一个列表 三元组,其中每个元组的第一个元素被取 从第一个列表中,第二个元素取自 第二个列表中的相应元素,以及第三个 元素取自第三个列表中的相应元素。将一个三元组的列表“解压缩”为三个列表,其中 第一个列表包含每个元组的第一个元素, 第二个列表包含每个元组的第二个元素,以及 第三个列表包含每个元组的第三个元素。将两个列表的元素合并为一个列表。

2024-01-24 22:20:26 434

原创 erlang (Lists 操作模块)学习笔记(二)

当两个元素比较相等时,List1 中的元素,如果有这样的元素, 在另一个元素之前选取,否则该元素 from List2 在 List3 中的元素之前被选中。返回 TupleList1 的副本,其中第一个 出现一个元组 T,其第 N个元素 如果存在这样的元组 T,则将等于 Key 替换为 NewTuple。Partitions List 分为两个列表,其中第一个列表 list 包含 Pred(Elem) 返回 true 的所有元素, 第二个列表包含 Pred(Elem) 返回 false 的所有元素。

2024-01-23 22:53:35 1829

原创 erlang (Lists 操作模块)学习笔记

将函数从 A s 转换为 B的列表,以及 A的列表 (List1),并通过将函数应用于 List1 中的每个元素并附加结果列表来生成 B列表。返回一个元组列表,其中,对于 TupleList1 中的每个元组,元组的第 N个元素 Term1 已替换为调用 Fun(Term1) 的结果。返回 TupleList1 的副本,其中第一个 出现第 N个元素比较的元组 等于 Key,如果存在这样的元组,则删除。返回 List1 的副本,其中第一个元素 匹配的 Elem 将被删除,如果有这样的 元素。

2024-01-22 22:40:58 1049

原创 erlang (OS 操作模块)学习笔记

使用日历时间以及此函数的返回元组的 MicroSecs 部分,允许 您可以以高分辨率记录时间戳,并与 操作系统其余部分的时间。返回所有环境变量的列表。每个环境变量都表示为 格式为“VarName=Value”,其中 VarName 为 变量的名称和 Value 其值。在 Unix 上,Osname 的值与 uname -s 返回的值相同,但大小写。在大多数系统上,此函数返回一个元组,如果系统具有 不能用三个数字表示,返回一个字符串。返回当前操作系统的 Osfamily,在某些情况下,返回 Osname。

2024-01-19 22:01:29 622

原创 分布式Erlang/OTP(学习笔记)(一)

当一台机器上的Erlang节点试图与某远程节点通信时,本地的EPMD就会联络远程机器上的EPMD(默认使用TCP/IP,端口为4369),询问在远程机器上有没有叫相应名字的节点。请注意,Erlang默认的分布式模型基于这样一个假设,那就是集群中的所有节点都运行在一个受信网络内。当跨计算机通信的门槛不再那么陡峭,你终将获得翻越它的力量,并将之看作是习以为常的事情-─除非是出于某些特殊原因,否则你的进程完全可以运行在相互独立的多台机器上,这时你便可以开始设计在以前看来复杂得超乎想象的系统了。

2024-01-18 22:05:02 2028

原创 Erlang/OTP中的日志与事件处理(二)

可能你并不喜欢错误日志记录器的默认输出格式。它与所有其他系统所使用的格式确实有较大的差异。你所在的企业可能已经围绕自己的日志格式开发了大量工具,这些工具无法与Erlang的日志格式兼容。这时你该怎么办呢?还好,错误日志记录器允许你在日志系统中穿插自定义的逻辑并输出自定义的错误信息。日志功能是构筑在Erlang的事件处理框架之上的,而该框架又以gen_event行为模式为基础。该行为模式为事件处理器封装了简单易用的接口。

2024-01-17 22:14:56 866

原创 Erlang/OTP中的日志与事件处理(一)

Log4j等日志系统(或是log4c、log4r等)。在各种软件开发工具中,日志的地位十分显赫,几乎所有编程语言都提供了一套适用于该语言的、可视为事实标准的日志系统。日志系统一般都设有多个严重级别,用于区分日志的重要程度。日志级别通常可分为五个,分别是: critical(或severe)、error、warning、info和debug。确切名称可能依系统的不同而不同。这几个级别的含义都显而易见,但每个级别的使用场合却没那么容易区分,针对这个问题,我们简单做一个总结。

2024-01-16 22:38:11 918 1

原创 OPT(erlang)打造一套缓存系统(一)

要获取与指定的键相关联的值,首先应该查找与键相关联的存储进程的D,然后再向该进程查询当前持有的值便可。调用start_child/2 API函数时,当前进程会向监督进程发送一条消息,令它以value和LeaseTime为参数调用sc_element模块的start_link函数,进而启动一个新的子进程。应用行为模式的实现位于文件src/sc_app.erl内,需要注意的是,.app文件中的mod元组给出了应用行为模式模块的模块名,系统就是从这里得知应该从何处启动和停止应用的。我们一共需要创建5个模块,

2024-01-15 22:14:27 1026

原创 erlang/OTP 平台(学习笔记)(四)

如果你在用Windows,你应该点击安装程序替你生成的Erlang图标,随后会启动名为werl的程序,它会打开一个特殊的Erlang终端,这样做可以避免直接在Windows终端下交互式运行erl会碰到的一些问题。当你输人双引号或单引号字符串时(现在先不讨论二者的区别),有一个特别值得注意的问题,如果忘了结尾的引号就敲了回车,shell会把同样的提示符再打印一遍并继续等待更多输人,这跟上一个忘记句号的例子差不多。要获取完整的shell函数清单,可以输人help()(具本身也是一个Shell函数)。

2024-01-12 20:45:29 900 1

原创 erlang/OTP 平台(学习笔记)(三)

标准Erlang实现的核心是一个称作Erlang运行时系统(ERTS)的应用:这是一大块用C语言写成的代码,负贡Erlang中所有底层的玩怎儿。在前一节,我们曾讨论过Erlang的进程调度器。随着线程在大多数操作系统中的普及,ERTS也有所变化,开始将I/O系统这类东西从运行Erlang进程的线程中拿出来,放到独立的线程中去,但完成主体工作的线程仍然只有一个。调度器——处理运行中的Erlang进程,令所有就绪的进程共享可用的CPU资源,并在新消息到达或发生超时的时候唤醒相应的睡眠中的进程;

2024-01-11 22:01:06 944 1

原创 erlang/OTP 平台(学习笔记)(二)

启动运算、派生进程、处理数据,在输出结果后的那一瞬间,所有进程神奇地烟消云散,它们的内部状态、它们持有的数据库句柄、它们打开的套接字,以及一切你不乐意手工清理的东西,都一并消失得无影无踪。这种情况下,进程接收到信号后,会先将其转为一条格式为{'EXIT',Pid,Reason}的消息,该消息描述了哪个进程出于什么原因而发生故障,然后这条消息会像普通消息一样被丢入信箱,捕捉到信号的进程就能分检并处理这类消息了。之前我们曾说过进程之间相互独立,单个进程的崩溃不会破坏其他进程,因为它们互不共享内部状态。

2024-01-10 22:33:55 405

原创 erlang/OTP 平台(学习笔记)(一)

将程序中内聚性低的部分隔离成独立的任务,最重要的收益是更清晰可读的代码,你的精力也得以集中到实际问题上;即便是在程序内较细粒度的层面上,你也同样可以设置这种隔离,就好像电脑桌面上的浏览器和文字处理器之间的关系一样。关于“并行”与“并发”的区别,另一个常见的说法是,“并行”形容两个或多个任务在同一时间同时发生,而“并发”形容两个或多个任务在一个时间段内交替进行,同一时间内只有一个任务在执行。每个进程代表一个持续的活动,它是某段程序代码的执行代理,与其他按各自的节奏执行自身代码的进程一起并发运行。

2024-01-09 22:07:25 962

原创 多核编程(erlang 学习笔记)(二)

比如,我们想找buster这个词,它出现在编号为1的文件中,名为/home/dogs,而查询rover AND jaguar,我们可以先查出rover (结果为文件1和文件3),再查出jaguar(结果为文件2和文件3),然后对这两个结果取交集(结果是文件3),也就是/home/cars这个文件。它做了两件事,其一,它启动一个名为indexer_server的服务器进程(这是一个用gen_server写成的服务器进程),其二,它启动了一个worker进程来执行索引动作。F1(Pid,X)是映射函数。

2024-01-08 23:29:36 946 1

原创 多核编程(erlang 学习笔记)(一)

对于Erlang来说,有一个巨大的优点,无需任何修改,你的程序就能在n核的CPU上跑得快n倍。但要遵循这些规则程序要由多个进程构成,这些进程之间彼此不会互相冲突,而且程序逻辑也不存在顺序瓶颈。在本节中,我们会涉及下面这些话题。要让程序在多核CPU上运行,需要做些什么?如何并行化顺序代码。顺序瓶颈问题。如何避免副作用。

2024-01-08 00:42:26 388 1

原创 构造基于OTP的系统(erlang学习笔记)

在对日志进行配置的时候,我们也可以指定,比如,只保存错误,其他的信息不予保存。这会创建一个适合程序开发的环境,只会提供错误日志的简单形式(不带启动参数的erl命令效果等同于erl -boot start_clean)。其实,所谓的事件处理程序,最为核心的概念就在于它提供了一个基础架构,我们可以安装自定义的处理程序。注意,错误是在Erlang shell中报告出来的,错误报告取决于错误日志记录器的配置。运行的时候,这个配置与前一个配置的效果看起来很相似,区别在于,只有错误会被记录到日志中。

2024-01-05 00:24:40 869 1

原创 Mnesia: Erlang数据库(二)(学习笔记)

需要留意的是,当我们为此建立了xxx这样的Erlang记录时,我们可以简单的使用这样的语法{attribute,record_info(fields,xxx)},而不需要显式的逐个字段的指定列名。首先我们可以选择将表存储在内存或者磁盘上(或者同时保存在内存和磁盘上),其次,可以选择将数据表保存在一台机器上,或者在多台机器上备份。NodeList是Erlang节点的列表,这个表的备份会存储在这些节点上。通常来说它的取值就是Erlang记录的名字,这个记录就是我们之前提到过的表示每行数据的记录。

2024-01-03 23:11:36 859 1

原创 Mnesia: Erlang数据库(一)(学习笔记)

在下载和安装Erlang后,在磁盘上的数千个文件之中,已经内置了一个相当完备的数据库管理系统,它的名字叫做Mnesia。它非常快,而且,更妙的是可以直接存储任意的Erlang数据结构Mnesia可以根据需要灵活配置。比如说,既可以把数据表存储在内存中(数据的访问速度),也可以存储在磁盘上(数据的持久性),甚至还可以在不同的机器上建立同一份数据的多个副。

2024-01-03 00:05:04 421 1

原创 OPT概述(erlang)(学习笔记)(一)

OTP即Open Telecom Platform(开放电信平台)。它是一个应用程序操作系统,还包括大量库和程序用来构建大规模的分布式容错系统。OTP最初是由瑞典的Ericsscn公司开发,它的设计目标就是用来构造容错系统。OTP包含了很多强大的工具,比如说,一个完备的Web服务器、FTP服务器、CORBA ORB等,它们全部都是用Erlang写成的。OTP还包含构建电信应用程序所需要的高级工具,比如,实现了H248、SNMP以及一个ASN.1到Erlang的交叉编译器。

2023-12-29 22:46:16 561 1

原创 对文件编程(erlang)(学习笔记)(一)

datal.dat文件从文件的数据项中一次读取一项,先要使用file:open打开文件,然后使用io:read函数读取独立的数据项直到读到文件末尾,最后使用file:close函数关闭文件。何定义file: consult在shell中用如下的命令来创建test1.dat文件:测试向文件中写入一行。

2023-12-28 23:36:07 375 1

原创 erlang基础(复习笔记)(二)

如果T是一个列表,那么[HIT]也是一个列表,这个列表以H为头,以T为尾。竖线符号(|)可以将列表的头和尾分隔开来,而门则是空列表。无论何时,当我们用[...|T]来构造一个列表时,都应该保证T是一个列表。如果T是一个列表,那么新的列表就是“正规形式”的,反之,新列表就被称为“非正规列表”。大多数的库函数都假定列表是正规的,它们不能正确地处理非正规列表。可以用[E1,E2,..,En|T]这种形式向T的起始处加入多个新元素。

2023-12-27 23:20:14 859 1

原创 erlang基础(复习笔记)(一)

N div M和N rem M是用于整数除和取余数,因此,5 div 3是1,5 rem 3是2。例如,'Monday '、'Tuesday'、'+'、'*'若想将一定数量的项组成单一的实体,那么就可以使用元组( tuple)。将若干个以逗号分割的值用一对花括号括起来,就形成了一个元组。还可以将原本不需要使用引号的原子引起来,'a'实际上就等同于a。如果你创建的一个新元组引用了一个已绑定的变量,那么新元组就会享有这个变量所引用的数据结构。Erlang中的原子是全局有效的,而且无需使用宏定义或者包含文件。

2023-12-27 00:59:47 378 1

原创 类IRC程序(erlang)(学习笔记)

我们不会遵照一个真正的IRC协议,我们需要的是一个不与标准兼容的完全由我们自己发明的协议。可以通过执行make chat_client来运行chat_client:test(),它实际上会开启4个窗口,所有客户端会连接到一个叫做general的群组,这么做只是为了方便测试。用户界面部件:是一个用于将接收到的消息显示出来的GUI窗口组件,当然它也负责发送消息,它发出的消息会发送到聊天客户端组件。如果想把这个程序部署在因特网上的话,我们要做的就是修改合适的密码和端口,并确保选择的端口能够接收外来的连接。

2023-12-25 22:58:23 397

原创 分布式编程(二)(学习笔记)

在我们上一章我们完成了一个简单名字服务,并在同一台机器上进行了简单的侧试让我们继续下一步。

2023-12-22 22:57:48 772

原创 分布式编程(一)(学习笔记)

我们向一个服务提交一个名字,然后该服务器向我们返回与这个名字相关联的值,这样的服务就叫做名字服务。当然我们也能通过名字服务来修改给定名字所对应的值。第一个名字服务极为简单。这个小例子的目的并非是要编写一个容错的名字服务而是为了让我们开始熟悉分布式编程技术。因此它不具备容错性,也就是说在它崩溃时它存储的全部数据都会丢失。

2023-12-21 23:11:45 388

原创 关于erlang并发(学习笔记)

并发概念其实早已根植于我们的大脑,根本无需后天学习,它是本能的一部分。人类对于刺激的反应很快,这个过程是由大脑中一个叫做杏仁核的部分所掌控。如若没有这种应激反应,很难想象我们人类如何能够生存到今天。对于生存来说,有意识的思考速度太慢,很多时候,在我们意识到需要“踩刹车”之前,我们的身体已经先做出了反应。在主干道上开车时,我们的大脑同时跟踪着数十辆乃至数百辆汽车的位置。这个过程是下意识的,并不需要我们有意识的参与。试想,如果没有这种能力,开车会是一件多么危险的事情。

2023-12-20 22:04:51 751 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除