对于beam 来说,一般有几种存储数据的方式:
- process dictionary
- ETS table
如果把gen server 的state 也算是一种方式的话,那么还有:
- gen server state
在Elixir 的Macro 中,提供了很方便的方式,可以在编译期将数据编译成beam,最简单的方式就是使用 @expr,关于@ 的详细文档,可以参见 here.
| defmodule T do | |
| # refc binary | |
| def test do | |
| for _ <- 1..600, do: spawn fn -> start() end | |
| end | |
| defp start do | |
| me = self() |
| defmodule Pmap do | |
| @moduledoc """ | |
| Documentation for Pmap. | |
| """ | |
| def pmap(list, func) do | |
| pmap(self(), 0, list, func, []) | |
| end | |
| @doc false |
| use std::collections::VecDeque; | |
| use std::collections::BTreeMap; | |
| use std::fmt::Debug; | |
| fn main() { | |
| answer(); | |
| transfer_ownership(); | |
| ref_example(); | |
| fn_example(); | |
| scope_example(); |
| defmodule Trade.MatchServer do | |
| use GenServer | |
| require Logger | |
| @buy_queue :buy_queue | |
| @sell_queue :sell_queue | |
| @unhandled 0 | |
| @before_generate_tx 1 | |
| @after_generate_tx 2 |
对于beam 来说,一般有几种存储数据的方式:
如果把gen server 的state 也算是一种方式的话,那么还有:
在Elixir 的Macro 中,提供了很方便的方式,可以在编译期将数据编译成beam,最简单的方式就是使用 @expr,关于@ 的详细文档,可以参见 here.
| % sys.erl | |
| get_state(Name) -> | |
| case send_system_msg(Name, get_state) of | |
| {error, Reason} -> error(Reason); | |
| State -> State | |
| end. | |
| send_system_msg(Name, Request) -> | |
| case catch gen:call(Name, system, Request) of | |
| {ok,Res} -> Res; |
| #Fields: timestamp time-taken c-ip filesize s-ip s-port sc-status sc-bytes cs-method cs-uri-stem - rs-duration rs-bytes c-referrer c-user-agent customer-id x-ec_custom-1 | |
| 1523756544 3 86.45.165.83 1845784 152.195.141.240 80 TCP_HIT/200 1846031 GET http://c13.adrise.tv/04C0BF/v2/sources/content-owners/sgl-entertainment/275211/v0401185814-1389k.mp4+740005.ts - 0 486 "-" "TubiExoPlayer/2.12.9 (Linux;Android 6.0) ExoPlayerLib/2.4.2" 49343 "-" | |
| 1523756611 58 86.165.81.111 3364824 152.195.141.240 80 TCP_HIT/200 3365071 GET http://c13.adrise.tv/04C0BF/v2/sources/content-owners/sgl-entertainment/326260/v20169101326-1256x544-3063k.mp4+3713710.ts - 0 616 "-" "Mozilla/5.0 (Linux; Android 5.1.1; AFTT Build/LVY48F; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36" 49343 "-" |
| %%%------------------------------------------------------------------- | |
| %%% @author redink | |
| %%% @copyright (C) , redink | |
| %%% @doc | |
| %%% | |
| %%% @end | |
| %%% Created : by redink | |
| %%%------------------------------------------------------------------- | |
| -module(rcursor). |
| -module('1e_sort'). | |
| -compile(export_all). | |
| -define(max_scope, 100000000). | |
| -define(start_step, 1000000). | |
| -define(user_table_num, 10). | |
| start(N) -> | |
| ets:new(scope_total_table, [named_table, ordered_set, public]), |
| -module(gen_server_call_timeout). | |
| %% API | |
| -behaviour(gen_server). | |
| %% API | |
| -export([start/0]). | |
| -export([run/2]). | |
| -export([multi_run/0]). | |
| -export([i/0]). |