Module cloudi_core_i_concurrency

CloudI Service Concurrency

.

Copyright © 2023 Michael Truog

Version: 2.0.6 Jun 20 2023 18:35:36 ------------------------------------------------------------------------

Authors: Michael Truog (mjtruog at protonmail dot com).

Description

CloudI Service Concurrency

Data Types

logical_processor()

logical_processor() = non_neg_integer()

scheduler_id()

scheduler_id() = pos_integer()

state()

state() = #concurrency{schedulers = pos_integer(), scheduler_bindings = tuple() | undefined, scheduler_id_lookup = #{logical_processor() := scheduler_id()} | undefined, scheduler_id_bind = scheduler_id()}

Function Index

bind_assign_process/3

Assign bind internal service process data.

.
bind_assign_process/4

Assign bind external service process data.

.
bind_format/1

Convert internal state to the bind configuration format.

.
bind_increment_thread/1

Increment the bind thread_index.

.
bind_init/1

Bind the CloudI service dispatcher process.

The other CloudI service Erlang processes automatically get the same bind when spawn occurs from the dispatcher process.
bind_logical_processor/1

Logical processor for binding external service threads.

.
bind_validate/4

Convert the bind configuration format to internal state.

.
count/2

Convert count_process/count_thread to the integer process_count/thread_count values.

.
new/0

Create concurrency information.

.

Function Details

bind_assign_process/3

bind_assign_process(Bind::#bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false, ProcessIndex::non_neg_integer(), Concurrency::#concurrency{schedulers = pos_integer(), scheduler_bindings = tuple() | undefined, scheduler_id_lookup = #{logical_processor() := scheduler_id()} | undefined, scheduler_id_bind = scheduler_id()}) -> {#bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false, #concurrency{schedulers = pos_integer(), scheduler_bindings = tuple() | undefined, scheduler_id_lookup = #{logical_processor() := scheduler_id()} | undefined, scheduler_id_bind = scheduler_id()}}

Assign bind internal service process data.

bind_assign_process/4

bind_assign_process(Bind::#bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false, ProcessIndex::non_neg_integer(), ThreadCount::pos_integer(), Concurrency::#concurrency{schedulers = pos_integer(), scheduler_bindings = tuple() | undefined, scheduler_id_lookup = #{logical_processor() := scheduler_id()} | undefined, scheduler_id_bind = scheduler_id()}) -> {#bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false, #concurrency{schedulers = pos_integer(), scheduler_bindings = tuple() | undefined, scheduler_id_lookup = #{logical_processor() := scheduler_id()} | undefined, scheduler_id_bind = scheduler_id()}}

Assign bind external service process data.

bind_format/1

bind_format(Bind::#bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false) -> boolean() | nonempty_string()

Convert internal state to the bind configuration format.

bind_increment_thread/1

bind_increment_thread(Bind::#bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false) -> #bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false

Increment the bind thread_index.

bind_init/1

bind_init(Bind::#bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false) -> ok

Bind the CloudI service dispatcher process.

The other CloudI service Erlang processes automatically get the same bind when spawn occurs from the dispatcher process.

bind_logical_processor/1

bind_logical_processor(Bind::#bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false) -> non_neg_integer() | -1

Logical processor for binding external service threads.

bind_validate/4

bind_validate(Bind::boolean(), CountProcess::pos_integer() | float(), CountThread::pos_integer() | float(), Concurrency::#concurrency{schedulers = pos_integer(), scheduler_bindings = tuple() | undefined, scheduler_id_lookup = #{logical_processor() := scheduler_id()} | undefined, scheduler_id_bind = scheduler_id()} | undefined) -> {ok, #bind{string_exact = nonempty_string() | undefined, thread_count = pos_integer() | undefined, thread_index = non_neg_integer(), scheduler_ids_exact = tuple() | undefined, logical_processors_exact = tuple() | undefined, scheduler_ids = tuple() | undefined, logical_processors = tuple() | undefined} | false} | {error, {service_options_bind_invalid, any()}}

Convert the bind configuration format to internal state.

count/2

count(I::pos_integer() | float(), Concurrency::#concurrency{schedulers = pos_integer(), scheduler_bindings = tuple() | undefined, scheduler_id_lookup = #{logical_processor() := scheduler_id()} | undefined, scheduler_id_bind = scheduler_id()}) -> pos_integer()

Convert count_process/count_thread to the integer process_count/thread_count values.

new/0

new() -> #concurrency{schedulers = pos_integer(), scheduler_bindings = tuple() | undefined, scheduler_id_lookup = #{logical_processor() := scheduler_id()} | undefined, scheduler_id_bind = scheduler_id()}

Create concurrency information.


Generated by EDoc