`
langzhe
  • 浏览: 286167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自己写的测试例子备用

阅读更多

 


  1 %%通过 gen_server 发送消息来实现 insert

  2 
  3 -module(test_ets_gen).
  4 -behaviour(gen_server).
  5 -export([start_link/0,test_call/1,test_cast/1]).
  6 -export([init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2,code_change/3]).
  7 -record(state,{}).
  8 
  9 start_link()->
 10         gen_server:start_link({local,?MODULE},?MODULE,[],[]).
 11 
 12 test_call(Num)->
 13         Start = timestamp_in_millinsec(),
 14         [gen_server:call(?MODULE,{new,1}) || _X<- lists:seq(1,Num)],
 15         End = timestamp_in_millinsec(),
 16         (End-Start)/1000.
 17 test_cast(Num)->
 18         Start = timestamp_in_millinsec(),
 19         [gen_server:cast(?MODULE,{new,1}) || _X<- lists:seq(1,Num)],
 20         End = timestamp_in_millinsec(),
 21         (End-Start)/1000.
 22 
 23 init([])->
 24         State=ets:new(test,[protected,set,named_table]),
 25         ets:insert(State,{info,0}),
 26         ets:insert(State,{starttime,timestamp_in_millinsec()}),
 27         {ok,State}.
 28 handle_call({new,Num},_From,State)->
 29         Conns = ets:lookup_element(State,info,2),
 30         Sum = Conns + Num,
 31         ets:insert(State,{info,Sum}),
 32         {reply,ok,State}.
 33 handle_cast({new,Num},State)->
 34         Conns = ets:lookup_element(State,info,2),
 35         Sum = Conns + Num,
 36         ets:insert(State,{info,Sum}),
 37         {noreply,State}.
 38 handle_info(_info,State)->
 39         {noreply,State}.
 40         
 41 terminate(_Reaseon,_State)->
 42         ok.     
 43 code_change(_OldVsn,State,_Exra)->
 44         {ok,State}.
 45         
 46 timestamp_in_millinsec()->
 47         {MegaSec, Sec, MicoSec} = erlang:now(),
 48         MegaSec * 1000000000 + Sec*1000 +MicoSec div 1000.


%%通过 ! 发送消息来实现 insert

-module(test_ets1).
-export([start/2,insert_ets_p/3]).
-compile(export_all).
start(Num,Process)->
        Tab=new_ets(),
        Be=timestamp_in_millinsec(),
        [begin spawn(?MODULE,insert_ets_p,[Num,self(),Tab]),recv(Num,Process) end || _X <- lists:seq(1,Process)],
%%      recv(Num,Process),
        En=timestamp_in_millinsec(),
        Re=En -Be,
        Re.
recv(Num,_Process)->
        receive
                R ->
                        insert_ets(Num,R),
                        ets:insert(test,{endt,timestamp_in_millinsec()}),
                        io:format("recv---~p~n",[R])
        after 100 ->
                        io:format("timeout~n")
        end.

insert_ets_p(Num,From,Tab)->
        io:format("------~p----~n",[From]),
        [From ! Tab || _X<- lists:seq(1,Num)].
new_ets()->
        Tab = ets:new(test,[protected,set,named_table]),
        ets:insert(Tab,{info,0,self()}),
        ets:insert(Tab,{start,timestamp_in_millinsec()}),
        Tab.
insert_ets(Num,Tab)->
        Conns = ets:lookup_element(test,info,2),
        Sum = Conns+Num,
        io:format("fffffff====~p====~p==",[Sum,self()]),
        %%ets:insert(test,{info,0}).
        ets:insert(Tab,{info,Sum,self()}).

timestamp_in_millinsec()->
        {MegaSec, Sec, MicoSec} = erlang:now(),
        MegaSec * 1000000000 + Sec*1000 +MicoSec div 1000.
~                                                          


多个线程共享ets导致出现脏数据
-module(test_ets).
-export([start/2,insert_ets_p/3]).
-compile(export_all).
start(Num,Process)->
        Tab=new_ets(),
        Be=timestamp_in_millinsec(),
        [spawn(?MODULE,insert_ets_p,[Num,self(),Tab]) || _X <- lists:seq(1,Process)],
        recv(Num,Process),
        En=timestamp_in_millinsec(),
        Re=En -Be,
        Re.
recv(_Num,_Process)->
        receive
                R -> io:format("recv---~p~n",[R])
        after 100 ->
                io:format("timeout~n")
        end.

insert_ets_p(Num,From,Tab)->
        io:format("-----~p--------~n-",[From]),
        [insert_ets(1,Tab) || _X<- lists:seq(1,Num)],
        From ! test.
new_ets()->
        Tab = ets:new(test,[public,set,named_table]),
        ets:insert(Tab,{info,0}),
        Tab.
insert_ets(Num,Tab)->
        Conns = ets:lookup_element(test,info,2),
        Sum = Conns+Num,
        io:format("fffffff====~p=====~p======~n",[Sum,self()]),
        %%ets:insert(test,{info,0}).
        ets:insert(Tab,{info,Sum}).

timestamp_in_millinsec()->
        {MegaSec, Sec, MicoSec} = erlang:now(),
        MegaSec * 1000000000 + Sec*1000 +MicoSec div 1000.
~                                                                          

分享到:
评论

相关推荐

    javal例子测试

    【描述】"java学习过程中自己的一些小例子,留下来作参考以备用"表明,这些代码片段是作者在学习Java的过程中编写的,它们可能涵盖了从基础语法到进阶概念的各种示例。留存这些例子是为了日后回顾或者作为他人学习的...

    测试用例模板内容

    - **2.1.1 需要补充例子**: 例如确认测试环境已准备好、所有测试步骤已完成等。 #### 三、非功能性测试 - **定义**: 不涉及具体功能实现的测试,关注系统的性能、安全性、可用性等方面。 - **作用**: 确保系统的非...

    标准txt文本备用文件

    本文将详细介绍如何解决JMeter中中文乱码问题,并通过一个具体的例子来演示解决方案。 #### JMeter中文乱码原因分析 1. **系统默认字符集设置:**JMeter运行环境(包括操作系统、JMeter自身)的默认字符集如果不是...

    delphi7的例子(cxGrid/ini/文件上传)

    eg_测试某列的条件改变另外列的Edit属性(cxGrid的例子) eg_对BoolToStr后的值进行再次转换_最后循环取bit值 eg_时间差计算_2 FileMS(明日科技的配套代码,关于文件上传下载的那个) EquipmentSQL_20170528_ok(如...

    05-系统设计之测试计划

    8. **风险与问题管理**:预见可能遇到的问题,制定应对策略,如备用测试方案或风险缓解计划。 9. **测试报告**:定义如何记录和报告测试结果,包括错误跟踪和测试覆盖率。 "06-测试计划"可能是文档中的一个章节,...

    电子政务-便携式电子产品的备用电池接口装置.zip

    6. **应用案例**:提供电子政务实际应用中的例子,展示备用电池接口如何帮助提升工作效率和应急响应能力,例如在户外会议、紧急情况下的设备供电等场景。 7. **未来发展趋势**:展望备用电池接口技术的未来发展,...

    行业资料-建筑装置-带备用墨水的钢笔.zip

    5. **耐用性和可靠性**:建筑行业的工具通常需要承受恶劣的工作条件,这种钢笔的耐用性和可靠性可能经过了专门的测试和验证,以确保在各种环境下都能正常工作。 6. **维护与保养**:资料可能包含了钢笔的保养技巧,...

    基于富士PLC例程--武隆县备用机

    在“武隆县备用机”这个例子中,Lad文件就是使用梯形图编程的源代码。梯形图由左至右的触点和右至左的线圈组成,触点代表输入,线圈代表输出,它们之间通过连接线构成逻辑关系。 【PLC程序的基本结构】 一个完整的...

    单片机35个经典的例子

    33. **嵌入式软件开发流程**:理解从需求分析、设计、编码、调试到测试的完整流程。 34. **硬件调试技巧**:学会使用示波器、逻辑分析仪等工具,排查硬件问题。 35. **固件升级机制**:设计安全的固件更新方案,...

    工业机器人-Siemens软冗余例子.7z

    4. **故障切换测试**:进行模拟故障测试,验证在主系统失效后,冗余系统是否能正确接管并保持系统的正常运行。 5. **监控与诊断**:设置合适的监控和诊断功能,以便在出现故障时能够快速识别问题,并进行必要的维护...

    SLC 500 冗余程序例子.rar

    5. **系统测试**:完成编程后,进行严格的系统测试,模拟各种故障情况,验证冗余系统的可靠性和切换性能。 冗余系统的优势在于它提高了系统的可用性,减少了停机时间,但同时也增加了系统复杂性和成本。因此,在...

    Android应用源码有米广告SDK例子.rar

    在Android开发中,有米广告SDK是...同时,这个例子也可以作为一个模板,帮助开发者快速在自己的项目中实现广告功能。在实际开发中,还应关注用户隐私政策、广告展示频率以及合规性问题,以确保应用的合法性和用户体验。

    菜单树实现的小测试项目

    在"描述"中提到,这个项目是作为未来备用的例子,这意味着它可能涉及到基本的菜单树操作,如展开/折叠节点、添加/删除/编辑节点、以及节点的选中状态处理。zTree提供了API接口,可以方便地完成这些操作。例如,`...

    项目部署的笔记啦啦啦啦啦啦啦啦啦啦备用

    3. Dockerfile 文件:Dockerfile 文件可以写在代码里面(放在根目录)或者写在 Jenkins 的脚本里面。 4. Jenkins 打包地址:http://jenkins-u.mobvoi.com/job/google-ota-web-pre/,选择 build 或者是 test 环境进行...

    带历史信息的菜单的VB例子

    3. **main_frm.frm**:可能是一个备用或修改版本的主窗体文件,通常在开发过程中用于测试不同的设计。 4. **main.frx**:这是窗体资源文件,存储了窗体中非代码的资源信息,如菜单项的文本、图标等。 5. **cdxx.ini*...

    西门子PLC例程-软冗余_315-2DP_CP342-5例子程序.zip

    6. **测试与验证**:在实际应用前,需要对整个软冗余系统进行严格的测试,确保在各种故障场景下都能正确切换,不会影响生产过程。 西门子提供的这个示例程序,就是为了让用户了解和学习如何在实际项目中设置和调试...

    软冗余_315-2DP_CP342-5例子程序.rar

    当主CPU出现故障时,备用CPU可以立即接管,保证系统的不间断运行。 在这个例子程序中,用户可以学习如何设置和配置S7-300的冗余系统,包括: 1. **冗余系统配置**:设置冗余主/备CPU,确保两者之间的数据同步,...

    上传备用营养缺乏草莓框选标注数据集

    在这个例子中,原始数据是那些草莓图像,它们是模型训练的基础。元数据则包含了关于这些图像的附加信息,如图像的拍摄日期、位置,以及关键的标注信息——缺磷、缺钙、缺铁。这些标注是人工进行的,可能通过专家的...

    HIBERNATE mysql 例子

    描述中的“以后备用”可能意味着这个压缩包包含了一些示例代码或教程,供未来参考。这将帮助我们理解如何配置和使用Hibernate连接MySQL数据库,以及执行常见的数据库操作,如CRUD(创建、读取、更新和删除)。 标签...

    软冗余_315-2DP_CP342-5例子程序.rar_300 软冗余样例_315_CP342_fought2nd

    在工业自动化领域,西门子S7-300系列PLC(可编程逻辑控制器)是一种广泛应用的控制系统。"软冗余"是该系统中的一种...通过学习和实践其中的示例,工程师可以增强自己在工业自动化领域的故障容错能力和系统设计能力。

Global site tag (gtag.js) - Google Analytics