Erlang的基准测试

需要测试Erlang系统各个方面的性能。

[list]
[*] 进程创建和并发能力
[*] 大数据量的消息传输
[/list]


queue_test() ->
Q = queue:new(),
Q1 = queue:in(1),
Q2 = queue:in(2),
ok.

-record(node_info, {
var = 0,
name,
selected = 0,
disks = []
}).

disk_test() ->
L = [
#node_info{name="node1", disks=[1,2,3,4]},
#node_info{name="node2", disks=[1,2]},
#node_info{name="node3", disks=[1,2]}
],
disk_get(L, 0).

move_head_to_tail([H|T]) -> T ++ [H];
move_head_to_tail([]) -> [].

disk_total(L) ->
lists:sum([length(D) || #node_info{disks=D} <- L]).

disk_max([]) ->
undifined;
disk_max(L) ->
[H|_] = lists:keysort(2, L),
H.

disk_get(L, Total) ->
io:format("------------------------------------------~n"),
receive
after 1000 ->
R = disk_get_n(L, Total, 2, []),
io:format("Selected ~p~n", [element(1, R)]),
disk_get(element(2, R), element(3, R))
end.

disk_get_n(L, Total, 0, Acc) ->
{Acc, L, Total};
disk_get_n(L, Total, N, Acc) ->
Disks = disk_total(L),
if
Total =/= 0 ->
L1 = [X#node_info{var=S/Total - length(D)/Disks} ||
#node_info{selected=S, disks=D} = X <- L];
true ->
L1 = L
end,
#node_info{name=Name, selected=S, disks=D} = H = disk_max(L1),
L2 = lists:keyreplace(Name, 3, L1, H#node_info{selected=S+1,
disks=move_head_to_tail(D)}),
disk_get_n(L2, Total+1, N-1, Acc ++ [H]).


问题:

因为变量的单次赋值原则,上述代码中不能对Q进行in-place修改。Q,Q1,Q2实现的效率如何?每次插入一元素,都要copy一份全新的数据结构出来吗?
[b]
所有的数据结构都面临这个问题。不过,ets可以通过id or name进行更新。
[/b]

类似的还有函数参数的传值方式,对大的结构效率如何?

在if clause中,L1=L为何必要?在分支的时候为了保证变量的安全性,在引入新的变量的时候,所有的分支都要正确的处理,在后面才能对新变量进行操作。关键是,L1=L的效率,是整个list的copy吗?还有,这种处理手法,毕竟有点别扭。

record的用法:用模式匹配提取字段比较好用。H#node_info.name这种用法别扭,代码过长。编译器知道H的实际类型,为何还要我们指明?换成H.name就方便的多了。或者H@name,哈哈都行呀。 :wink:
事件相机(Event Camera)及相关研究简介——新一代相机?新的计算机视觉领域? 事件相机(Event Camera)及相关研究简介 事件相机是一个新型的类脑相机,是一个待开发的大领域。希望通过我的分享,能够有更多人来研究并将它更好地运用在我们的生活中~ 阅读详情

相关推荐

Seedance 2.5本地部署指南:AI生图与视频生成的完整实践

最近在AI生成内容领域,本地部署方案越来越受到开发者关注。特别是Seedance 2.5的发布,让很多原本依赖云端服务的用户开始转向本地化解决方案。本文将从实际使用角度出发,完整介绍Seedance 2.5的本地部署流程、功能特性对比以及实际应用技巧。 1. Seedance 2.5核心特性解析 1.1 什么是Seedance 2.5 Seedance 2.5是一款开源的AI生图和视频生成工具,支持在本地环境运行,无需联网即可实现高质量的图像和视频生成。相比之前的2.0版本,2.5在生成质量、运行效率和功能

weixin_42566121的博客 1696

Erlang程序的性能测试工具(1)

一、eprof的使用 A. eprof可以植入到程序代码中 过程记下: 1. 启动eprof服务器 [code="java"]eprof:start() [/code] 2. 开始profiling [code="java"]eprof:profile([self()]) [/code] 或者 [code="java"]eprof:start_profiling([self...

好记性不如烂博客 437

GEE生物量碳储量——利用sens和MK检验方法计算1987-2022年森林地上生物量AGB和碳储量的时空变化特征

本文是将之前已经处理好的森林生物量和碳储量数据保存到GEE Assets中,然后分别将单张影像导入到代码编辑器中,构建一个时间序列集合,并且这里需要用到的是我们给影像添加指定的时间属性,这样方便进行下一步的时序分析和空间预测。首先,需要收集1987年至2022年期间森林地上生物量AGB和碳储量数据。该数据可以通过森林清查数据、卫星遥感数据等途径获取。然后,根据这些数据,可以使用sens(敏感性分析)和MK(Mann-Kendall)方法计算时空变化特征。

此星光明博客 1265

Erlang 环形基准测试

Erlang 环形基准测试 在一个环中创建 N 个进程, 沿着环发送一条消息 M 次, 最后总共发送 N * M 条消息, 在 N M 不同取值下所用时间 代码如下 %%nest.erl -module(nest). -author({lustre}). -export([start/2]). % -compile(export_all). create(1, Pid) -> Pid;

PiperCocoa的专栏 677

SpringBoot 教程:SpringBoot多种方式实现静态Html页面跳转

本教程介绍了 Spring Boot 中实现静态 Html 页面跳转的常用方法,包括重定向跳转、直接返回 ModelAndView 对象以及使用 Thymeleaf 模板引擎。如果你的项目中使用了 Thymeleaf 模板引擎,那么可以利用它来实现静态页面的跳转。对于静态的 Html 页面,我们可以使用多种方式来实现跳转功能。重定向是一种常见的页面跳转方式,它通过发送 HTTP 重定向响应头来告知浏览器跳转到指定的页面。在 Spring Boot 中,我们可以将视图名称设置为静态页面的路径。

2301_79325657的博客 2449

如何卸载Gazebo与重装

gazebo是一款关于车辆和无人机的仿真软件,本文大致介绍它是何物,以及他的安装和卸载方法,对于ROS开发者,本文有一定参考意义。

gongdiwudu的专栏 1万+

Erlang环形基准测试 (练习)

最近在看《Erlang程序设计》这本书,学习中... 有个环形基准测试的练习,自己写的程序,如下 -module(looptest). -export([start/3]). %% PC : process count %% MC : message count %% Msg: message sent in the ring start(PC, MC, Msg) when is_inte

cevinluo的专栏 549

让 ABAP 内表真正释放内存:从 CLEAR、FREE 到打破 Table Sharing 的实战技巧

ABAP内表内存管理的关键在于理解其运行时结构:DELETE操作仅逻辑删除行而不会释放内存,CLEAR或FREE才能真正回收内存。常见的误区包括误判空表状态和忽视内表共享机制。实际应用中,大表筛选后应采用VALUE表达式或逐行插入方式重建表体以释放内存。典型案例显示,正确处理内表内存可显著降低SAP Gateway和批处理程序的内存消耗,提升系统稳定性。开发时需结合调试工具观察内存状态,避免因共享机制导致无效回收。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 325

erlang 程序设计 习题:环形基准测试

编写一个环形基准测试。在一个环中创建N个进程。然后沿着环发送一条消息M次,最后总共发送N*M条消息,在N和M的不同取值下测试整个过程会消耗多长时间。 不知道我对这个题目的理解是否是正确的,创建一个进程,然后再这个进程中再创建一个,总共创建N个,形成一个环,只需要向Head进程发送一条消息,消息就可以沿着进程环传递直到最后一个进程。 下面是代码: -module(circle_proces...

weixin_30384031的博客 67

S7-200SMART 的运动控制(一)向导配置具体步骤(图文)

S7-200SMART 的运动控制(一)向导配置具体步骤(图文)

Robot_PLC_HMI_Automation 3852

基于YOLOv8的城市违建识别系统:从数据集构建到UI界面实现

YOLOv8是Ultralytics公司于2023年推出的最新一代YOLO(You Only Look Once)系列目标检测算法。更高效的骨干网络设计改进的锚框机制更精确的损失函数支持分类、检测、分割等多任务YOLOv8特别适合像违建识别这样的实时检测任务,能够在保持高精度的同时实现快速推理。

YOLO 675

eMQTT-Bench:轻量级的Erlang编写的MQTT基准测试工具

eMQTT-Bench 是一个专为MQTT协议v5.0设计的轻量化性能测试工具,它采用Erlang编程语言开发而成。Erlang以其并发性和分布式处理能力而著称,这使得eMQTT-Bench能够高效地模拟成千上万个MQTT客户端的连接、订阅和发布操作,非常适合用于评估MQTT服务器的负载承受能力和性能表现。 ## 核心功能 eMQTT-Bench的主要核心功能包括: - **连接测试**(C...

gitblog_09256的博客 513

大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略

本篇文章是《Spring AI实战》专栏的第一篇开发入门文章,我们将借助一个完整的OpenAI聊天应用示例,详细介绍如何运用Spring Boot和Spring AI快速搭建一个支持OpenAI API的聊天服务,全面涵盖基础对话、流式对话、多提供商配置等核心功能。

寻道AI,探索AI无限可能! 6872

Erlang/OTP 基准测试指南:基于 ts 框架的运行、编写与结果采集

本文以 Erlang/OTP 官方仓库中的 [HOWTO/BENCHMARKS.md](https://link.gitcode.com/i/9ec3c36bc003e473c9e4a2ae0e6ac52e) 为主线,系统讲解 OTP 源码树内置基准测试框架的完整使用链路:从释放测试环境、运行全部基准,到以 Common Test 测试用例的形式编写新基准,再到通过 `ct_event` 事件机制

gitblog_01183的博客 328

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Erlang 环形基准测试程序

     题目来源于《Erlang 程序设计》(人民邮电出版社 ISBN 978-7-115-18869-4)第 115 页的习题二。题目是在一个环中创建 N 个进程,然后沿着环发送一条消息 M 遍,共 N*M 遍,统计消耗时间。     题目其实有某些不太清楚的地方,在于发送消息的方式。有以下理解方式:     1)进程1向进程2发送消息,进程2收到后再向进程3发送消息,此外的时

1077

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Erlang信息传递环形基准测试

    目的是用Erlang语言首先创建一个含有N个进程的环,  然后沿着环发送一条消息M次, 测试在N和M取不同值时整个过程的耗时情况. 此有一例, 可参照看看. 我的代码如下:%文件名exec.erl-module(exec).-compile(export_all).for(N,N,F)->F(),[];for(I,N,F)->F(),for(I+1,N,F).start(N

数学算子的天地 1155

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Dark Reader 深色模式扩展:三种渲染引擎怎么选,装完照着调

晚上十点半还在写代码,旁边浏览器窗口开着一整页白色文档,那种亮度在暗房间里格外扎眼。Dark Reader 做的事情很简单:分析当前页面的结构,然后生成一套深色样式覆盖上去,让绝大多数网站都能获得一套体面的深色调,浏览时眼睛没那么容易累。 装完点一下图标就能用,但真正拉开体验差距的,是它背后那套"引擎切换 + 单站覆盖"的参数体系。下面先讲清楚核心概念,再走一遍从安装到调参的完整流程,最后收几个

gitblog_00089的博客 696

LING测试与调试:在无操作系统环境中确保Erlang应用质量

LING作为"Erlang on Xen"技术的实现,允许开发者在无操作系统环境中运行Erlang应用。这种独特的架构虽然带来了资源效率和隔离性优势,但也对测试与调试工作提出了特殊挑战。本文将详细介绍如何在LING环境中构建可靠的测试策略,确保应用在裸金属或虚拟化环境中稳定运行。 ## 一、LING测试体系概览 LING项目采用多层次测试架构,从基础函数到系统集成全面覆盖。测试代码主要集中在`

gitblog_01074的博客 339

实测!Gleam性能碾压?主流语言基准测试全解析

你还在为选择高效编程语言发愁?当系统面临高并发、大数据处理需求时,性能瓶颈往往成为项目成败的关键。本文通过权威基准测试,带你全面了解Gleam在列表操作场景下的性能表现,对比分析其与JavaScript、Erlang等主流语言的核心差异,助你做出更明智的技术选型。读完本文,你将清晰掌握Gleam的性能优势、适用场景及优化策略。 ## 为什么选择Gleam? Gleam是一种用于构建类型安全、可...

gitblog_00156的博客 1100

探索轻量级MQTT基准测试工具:eMQTT-Bench

![eMQTT-Bench Logo](https://user-images.githubusercontent.com/164324/191903878-7f675d84-e38f-4aaf-81fa-c691d9ceb28b.png) 在物联网(IoT)领域,MQTT协议因其轻量级和低带宽消耗的特性而广泛应用。今天,我们要向您推荐一款由Erlang编写的高度灵活的MQTT v5.0基准测试...

gitblog_00846的博客 681

为什么Erlang比C慢那么多倍?

Erlang 一直以慢“著称”,本文就来看看 Erlang 慢在什么地方,为什么比实现同样功能的 C 语言程序慢那么多倍。Erlang 作为一种虚拟机解释的语言,慢是当然的。不过本文从细节上分析为什么 Erlang 这种虚拟机语言会慢。 本文从 shootout benchmark[注1]中选择了一个 Erlang 和 C 语言单核性能差距最大的例子——reverse compleme...

352

个人求解编写一个环形基准测试。在一个环中创建N个进程。然后沿着环发送一条消息M次,最后总共发送N*M条消息,在N和M的不同取值下测试整个过程会消耗多长时间。

Erlang编写一个环形基准测试。在一个环中创建N个进程。然后沿着环发送一条消息M次,最后总共发送N*M条消息,在N和M的不同取值下测试整个过程会消耗多长时间。 Erlang程序设计中文版的8.11习题 -module(hoop). %% ==================================================================== %%

huangjialegaoan的博客 598

erlperf:性能评估与基准测试的利器

erlperf:性能评估与基准测试的利器 在现代软件开发中,性能是衡量程序质量的重要指标之一。如何准确、高效地进行性能评估与基准测试,成为了开发者关注的焦点。今天,我要向大家推荐一个开源项目——erlperf,它为Erlang开发者提供了一套强大的性能评估与基准测试工具。 项目介绍 erlperf是一个基于Erlang语言编写的性能评估与基准测试套件。它提供了一种简单的方式来比较不同代码段的执行效...

gitblog_00073的博客 607

开源项目常见问题解决方案:Erlang WebSocket客户端

开源项目常见问题解决方案:Erlang WebSocket客户端 基础介绍 本项目是一个使用Erlang编写的WebSocket客户端。它支持通过ws和wss协议连接到WebSocket服务器,并实现了类似于cowboy的websocket_client_handler,以便与WebSocket服务器进行交互。该项目适用于基准测试和调试WebSocket服务器,目前支持通过TCP和SSL连接。 主...

gitblog_00238的博客 855

《Erlang程序设计》第8章习题解

(1)编写一个函数start(AnAtom,Fun)来把spawn(Fun)的结果注册为AnAtom。当两个并行的进行同时执行到start/2函数时,要确保代码能够正常工作。也就是说,这两个进程其中一个成功执行,而另一个必须执行失败。 -module(ex1). -compile(export_all). main(_) -> start(abc, fun() -> io:f

北蔡的代码世界 1626

eMQTT-Bench:轻量级MQTT基准测试工具快速指南与问题解答

eMQTT-Bench 是一个基于Erlang编写的轻量级MQTT v5.0协议性能测试工具。它允许开发者和系统管理员评估MQTT服务器的处理能力,通过模拟大量客户端的连接、发布和订阅行为。此项目托管于GitHub,地址为 [emqx/emqtt-bench](https://github.com/emqx/emqtt-bench),并且遵循Apache-2.0许可证。 **主要编程语言:** ...

gitblog_09254的博客 768
上一篇: Erlang的代码加载过程
下一篇: Erlang bytecode
kernel121
博客等级 码龄16年 1粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值