今天写程序的时候忽然用到了进程字典里的东西,所以写一些,由于时间太晚了说些基础的,明天再去分析下源码是如何实现的
我很少使用进程字典,不过在游戏开发的过程中还是会用它存储一些不变,或者说不会发生并行调用而改变其value的地方,例如一个Map进程的MapName,或者是terminate的类型,
对于进程字典我的理解还停留在书上的一些注解上,不过可以理解的是,进程字典是一种很快的获取数据的方法,他针对本进程内操作。
方法是erlang:put(Key, Value), erlang:get(Key)等,总而言之就是key-value操作,哈希数组排列方式,说到这想起来的一道大学基础题(key-value操作的就一定是哈希排列吗?)
还可以确定的就是由于在进程字典打破了erlang传统的变量不可多次赋值的规则,在进程内设置了全局目录,你每次存储以后就可以直接提取使用,不过书上提到过由于没有锁操作,所以尽量不要使用,这个很好理解,你如果并行调用,因为没有锁的关系,key-value的值会发生无顺序改变,从而导致数据失真!还有一种情况是,如果进程死亡,那么重启的进程的进程字典是和以前的不一样的,也就是说,当我们还是依照老的模块代码去调用进程字典中的值的时候,是要返回error的,这个时候就很麻烦了,考虑到这个问题,所以很多书籍都告诉我们,不要使用进程字典!
写几个操作给大家看看
erlang:put(terminate, ?TERMINATE_CONTINUE_TYPE). erlang:put(mapname, MapProcName). TerminateType = erlang:get(terminate). MapProcname = erlang:get(mapname).
这就是简单的进程字典的实现,下面写下进程字典的另一种操作
erase() -> [{Key, Val}] Types: Key = Val = term() Returns the process dictionary and deletes it. > put(key1, {1, 2, 3}), put(key2, [a, b, c]), erase(). [{key1,{1,2,3}},{key2,[a,b,c]}]
erase() -> [{Key, Val}] Types: Key = Val = term() 返回进程字典中所有的key-value对,并删除他们 > put(key1, {1, 2, 3}), put(key2, [a, b, c]), erase(). [{key1,{1,2,3}},{key2,[a,b,c]}] erase(Key) -> Val | undefined Types: Key = Val = term() 返回以Key为关键字的进程字典并删除他,如果没有相应的则返回undefined > put(key1, {merry, lambs, are, playing}), X = erase(key1), {X, erase(key1)}. {{merry,lambs,are,playing},undefined}
源码的实现我没有找到,因为这个毕竟是最底层的方法是用C实现的,如过哪位大侠知道的话希望能告诉我位置或者传给我一份,很想看看实现过程
相关推荐
#### Erlang进程字典实现Memcache **1. 字典模块的封装** 为了使进程字典能够适用于实际的产品开发,需要对其进行一系列的封装,包括但不限于: - **按表名查询**:不同的表实际上对应不同的进程,支持基于表名的...
Erlang,一种由Ericsson开发的面向并发的编程语言,以其在分布式系统和实时高可用性场景中的优秀性能而闻名。在Erlang中,处理大数据存储有多种方式,其中包括ETS(Erlang Term Storage)、DETS(Distributed Erlang...
多处理,即在多核处理器上同时运行多个Erlang进程,是Erlang提供的又一并发编程模型。 Erlang的OTP框架是一组用于处理常见任务的库和中间件,它包括了用于应用管理和并发控制的工具。 事件处理机制使得Erlang应用...
例如,以下代码展示了创建一个无限循环进程并发送消息的基本过程: ```erlang -module(test). -start() -> spawn(?MODULE, loop, []). -loop() -> io:format("Waiting for new message.~n"), receive M -> io:...
进程字典是Erlang提供的一种全局键值存储机制,用于存储进程内部的状态信息。 - **`@spec put(Key, Value) -> OldValue.`**:用于向进程字典中添加键值对,返回旧的值。 - **`@spec get(Key) -> Value.`**:获取...
Erlang的并发模型基于轻量级进程,这些进程之间的通信主要通过消息传递来进行。每个进程都有一个独立的消息队列,并且可以通过发送消息给其他进程来启动异步任务或请求服务。这种模型非常适合实现高度并行和容错的...
例如,Erlang的进程模型和轻量级并发可能在处理大规模数据时提供优势;Java的JVM和内存管理策略允许处理更大规模的数据;PHP可能需要借助像Swoole这样的扩展来提升性能,"swoole_table_test.php"和"swoole.png"可能...
- Erlang进程的调度机制是如何工作的。 - 实时性是指系统能够及时响应外部事件的能力,而优先级则决定了进程执行的先后顺序。 **5.7 进程组** - 如何将进程组织成组。 - 进程组可以简化管理和监控多个进程的工作。 ...
5. **ets**: Erlang的轻量级进程间通信数据结构,用于快速查找和存储数据。包含`new/2`, `insert/2`, `lookup/2`等操作。 6. **dict**: 提供关联数组(字典)操作,适用于需要快速查找的键值对。 7. **file**: ...
gproc, Erlang的扩展进程注册表 gproc应用程序作者: 超级用户,约瑟夫 Wayne 。扩展进程字典 注释Gproc有两个依赖项:gen_leader 和 edown 。 由于大多数人都不积极使用,所以默认情况下它们不再被获取。要启用 gen...
杂项章节涵盖了末尾调用优化、引用、代码替换、端口、二进制类型、进程字典、网络内核、散列和效率等内容。末尾调用优化是Erlang中一种重要的性能优化手段,能够减少栈空间的使用,从而提升并发性能。 书中还包含了...
在Erlang的学习过程中,理解和掌握如何构建能够处理多个连接的服务器是非常重要的一步。本篇文档将详细介绍如何通过Erlang语言实现一个支持多个并发连接的TableServer,并探讨进程的创建、Socket操作以及消息传递等...
这种机制在处理并发进程时尤其有用,因为Erlang中的每个进程都有自己的私有堆,互相独立,且易于管理。 在Erlang内存管理的背景下,有几个重要的概念需要理解: 1. 堆和栈: Erlang中的每个进程都有自己的内存堆和...
gproc应用程序 作者: Ulf Wiger( ),Joseph Wayne Norton( )。 扩展过程字典 ...Gproc是Erlang的过程字典,除了内置字典所具有的功能外,它还提供了许多有用的功能: 使用任何术语作为流程别
总的来说,Erlang中的特里树实现涉及对Erlang的数据结构(如记录和字典)的熟练掌握,以及对函数式编程思想的理解,尤其是递归和模式匹配。通过这样的实现,我们可以构建出高效、灵活的字符串处理工具,特别适合处理...
4. **并发处理**:利用Erlang的进程(process)机制,可以并发处理多个求婚请求,提高效率。 5. **结果输出**:最后,输出所有稳定的婚姻配对。 在提供的文件列表"erlang-stable-marriage-master"中,很可能包含了...
基于进程字典来是实现类变量, parse_transform实现类方法的继承.基于 修改,原项目将不再更新维护。%% 优先级选择节点,从左到右遍历子节点,若子节点的准入条件符合信息则执行该子节点-define(EBT_SELECTOR, ebt_...
例如,Erlang 使用原子(atom)、列表、元组、映射等数据类型,而 Python 有字符串、列表、字典等。因此,当两个使用不同语言的系统需要交换数据时,就需要这样的库来进行格式转换。 在 pickle-master 压缩包中,...