maksim-kita 6a7a7f5e2e ActorSystem scheduler queue include fix 1 year ago
..
ut c76aaf823d Fix input variable missprint 1 year ago
ut_fat 37785d3b5b Improve benchmarks, KIKIMR-19207 1 year ago
CMakeLists.darwin-x86_64.txt 37785d3b5b Improve benchmarks, KIKIMR-19207 1 year ago
CMakeLists.linux-aarch64.txt 37785d3b5b Improve benchmarks, KIKIMR-19207 1 year ago
CMakeLists.linux-x86_64.txt 37785d3b5b Improve benchmarks, KIKIMR-19207 1 year ago
CMakeLists.txt 887be65957 External build system generator release 29 1 year ago
CMakeLists.windows-x86_64.txt 37785d3b5b Improve benchmarks, KIKIMR-19207 1 year ago
README.md 25a3b914f4 Add Lazy and Tail sends, 1 year ago
actor.cpp c576fbcfb4 Fix TlsActivationContext caching by compiler KIKIMR-19993 1 year ago
actor.h d84527173e Check stateFunc type before assign it, KIKIMR-19280 1 year ago
actor_benchmark_helper.h 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
actor_bootstrapped.cpp dafdfd006b actors object model 2 years ago
actor_bootstrapped.h e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
actor_coroutine.cpp 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
actor_coroutine.h 81455e7b2b KIKIMR-18568: remove dependency library/cpp/actors to ydb/core/protos 1 year ago
actor_coroutine_ut.cpp cc0aeb89f6 Improve coroutine actor interface 1 year ago
actor_ut.cpp 37785d3b5b Improve benchmarks, KIKIMR-19207 1 year ago
actor_virtual.cpp dafdfd006b actors object model 2 years ago
actor_virtual.h 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
actorid.cpp d507a9366b Restoring authorship annotation for <pkalinnikov@yandex-team.ru>. Commit 2 of 2. 2 years ago
actorid.h 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
actorsystem.cpp 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
actorsystem.h e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
actorsystem_ut.cpp 2e714b5ebd Restoring authorship annotation for Sergey Polovko <sergey@polovko.me>. Commit 2 of 2. 2 years ago
ask.cpp 33421d6381 revert light events 1 year ago
ask.h b6f3a80f7c Restoring authorship annotation for <amatanhead@yandex-team.ru>. Commit 2 of 2. 2 years ago
ask_ut.cpp b6f3a80f7c Restoring authorship annotation for <amatanhead@yandex-team.ru>. Commit 2 of 2. 2 years ago
av_bootstrapped.cpp 33421d6381 revert light events 1 year ago
av_bootstrapped.h 8dc88ac098 Get rid of IActorVirtual 1 year ago
balancer.cpp 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
balancer.h 2e77ddea28 AS1.4, 1 year ago
balancer_ut.cpp e5d4696304 Restoring authorship annotation for <serxa@yandex-team.ru>. Commit 2 of 2. 2 years ago
benchmark_ut.cpp e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
buffer.cpp 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
buffer.h 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
callstack.cpp e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
callstack.h d570836295 Remove extra semicolon (library) 1 year ago
config.h 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
cpu_manager.cpp 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
cpu_manager.h ba9a310064 Add several pools for one thread, KIKIMR-18440 1 year ago
cpu_state.h 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
defs.h 39be171bb2 Report actor usage activity KIKIMR-11082 1 year ago
event.cpp 33421d6381 revert light events 1 year ago
event.h 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
event_load.cpp 8c8a4c1d7d guard for memory markers + split actor type operators 1 year ago
event_load.h e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
event_local.h 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
event_pb.cpp 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
event_pb.h 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
event_pb_payload_ut.cpp 62b6757421 Fix coroutine event serializer 1 year ago
event_pb_ut.cpp 62b6757421 Fix coroutine event serializer 1 year ago
events.h 9a2eb065f0 pg proxy and pg wire first version 2 years ago
events_undelivered.cpp e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
executelater.h 29d668fad4 Library/cpp/actors Activities 2 years ago
executor_pool.h ba9a310064 Add several pools for one thread, KIKIMR-18440 1 year ago
executor_pool_base.cpp 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
executor_pool_base.h e4028d4db9 Revert commit rXXXXXX, Introduce perfect activation queue 1 year ago
executor_pool_basic.cpp f8ca3b8af2 ActorSystem remove unused code 1 year ago
executor_pool_basic.h f8ca3b8af2 ActorSystem remove unused code 1 year ago
executor_pool_basic_feature_flags.h 7082400c05 Add local activation queues, KIKIMR-19207 1 year ago
executor_pool_basic_ut.cpp e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
executor_pool_io.cpp 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
executor_pool_io.h e4028d4db9 Revert commit rXXXXXX, Introduce perfect activation queue 1 year ago
executor_pool_united.cpp 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
executor_pool_united.h af0ed98ed9 Refactor sending and registration methods, 1 year ago
executor_pool_united_ut.cpp e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
executor_pool_united_workers.h ba9a310064 Add several pools for one thread, KIKIMR-18440 1 year ago
executor_thread.cpp 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
executor_thread.h e19e4a226b Remove needless template argument, KIKIMR-18950 1 year ago
harmonizer.cpp 7082400c05 Add local activation queues, KIKIMR-19207 1 year ago
harmonizer.h 82d3095647 Add exchangin threads when cpu usage around limit, 1 year ago
hfunc.h df5ff1cecd getting rid of TActorContext in state functions 1 year ago
interconnect.cpp 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
interconnect.h 8d15e67485 Introduce distributed configuration KIKIMR-19031 1 year ago
invoke.h 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
io_dispatcher.cpp e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
io_dispatcher.h 33421d6381 revert light events 1 year ago
lease.h e5d4696304 Restoring authorship annotation for <serxa@yandex-team.ru>. Commit 2 of 2. 2 years ago
log.cpp 25d84e86f4 add log macros 1 year ago
log.h c576fbcfb4 Fix TlsActivationContext caching by compiler KIKIMR-19993 1 year ago
log_buffer.cpp 67ddc7744f add log buffer 3 2 years ago
log_buffer.h 67ddc7744f add log buffer 3 2 years ago
log_iface.h 48838be4e2 unify actor-system-logs for non-actor-system cases 1 year ago
log_metrics.h d570836295 Remove extra semicolon (library) 1 year ago
log_settings.cpp e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
log_settings.h 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
log_ut.cpp 33421d6381 revert light events 1 year ago
mailbox.cpp 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
mailbox.h 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
mailbox_queue_revolving.h 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
mailbox_queue_simple.h 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
mon.h e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
mon_stats.h 39be171bb2 Report actor usage activity KIKIMR-11082 1 year ago
mon_ut.cpp e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
monotonic.cpp c9df7fc86b Support monotonic boot time with suspend awareness 1 year ago
monotonic.h 56a6dcb981 Switch TMonotonic to CLOCK_BOOTTIME instead of a separate type 1 year ago
monotonic_provider.cpp c9df7fc86b Support monotonic boot time with suspend awareness 1 year ago
monotonic_provider.h 56a6dcb981 Switch TMonotonic to CLOCK_BOOTTIME instead of a separate type 1 year ago
performance_ut.cpp e601ca03f8 Y_VERIFY->Y_ABORT_UNLESS at ^l 1 year ago
probes.cpp e5d4696304 Restoring authorship annotation for <serxa@yandex-team.ru>. Commit 2 of 2. 2 years ago
probes.h 25a3b914f4 Add Lazy and Tail sends, 1 year ago
process_stats.cpp bc1247e1df Check TProcStat.Fill result in library/cpp/actors/core/process_stats.cpp 1 year ago
process_stats.h 43a2b5dd73 switch metrics registry to shared_ptr KIKIMR-14218 2 years ago
scheduler_actor.cpp 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
scheduler_actor.h 330c83f8c1 Restoring authorship annotation for Alexey Borzenkov <snaury@yandex-team.ru>. Commit 2 of 2. 2 years ago
scheduler_actor_ut.cpp 30f4921b0f Restoring authorship annotation for <timestep@yandex-team.ru>. Commit 2 of 2. 2 years ago
scheduler_basic.cpp 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
scheduler_basic.h 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
scheduler_cookie.cpp 784925324f Y_FAIL->Y_ABORT at '^li' 1 year ago
scheduler_cookie.h 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
scheduler_queue.h 6a7a7f5e2e ActorSystem scheduler queue include fix 1 year ago
servicemap.h 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
thread_context.h 7082400c05 Add local activation queues, KIKIMR-19207 1 year ago
tsan.supp 653f57be2e add tasan.supp, lsan.supp 1 year ago
worker_context.cpp e5d4696304 Restoring authorship annotation for <serxa@yandex-team.ru>. Commit 2 of 2. 2 years ago
worker_context.h 23b4cd8615 Y_VERIFY_DEBUG->Y_DEBUG_ABORT_UNLESS at '-v ydb' 1 year ago
ya.make 37785d3b5b Improve benchmarks, KIKIMR-19207 1 year ago

README.md

ActorSystem

Sending

Обычная отправка (Send) сообщения проходит следующим образом:

1) По получателю находится MailBox 2) Кладется сообщение в мейлбокс 3) Проверяется единсвенное ли это сообщение в мейлбоксе, если нет, то больше ничего не делаем 4) Иначе кладем сообщение в очередь активаций и в случае наличия спящих потоков, будим один из них

Из этого следует, что мы всегда стараемся будить поток. Например если 2 актора пересылают друг другу сообщение, то они будут по переменно работать в разных потоках.

Но они вполне могли бы работать на одном потоке, и скорее всего это бы работало эффективней:

  • Кеши не теряются из перехода с одного потока на другой.
  • Меньше затрат на пробуждение потоков.

Для этого сделали два других способа отправки SendESendingType::Lazy и SendESendingType::Tail

SendESendingType::Lazy старается придержать мейлбокс в который отправили сообщение, до окончания обработки текущего мейлбокса и работае следующим образом:

1) По получателю находится MailBox 2) Кладется сообщение в мейлбокс 3) Проверяется единсвенное ли это сообщение в мейлбоксе, если нет, то больше ничего не делаем 4) Захватываем мейлбокс 5) Если до этого уже захватили мейлбокс, то старый кладется в очередь активаций и пробуем разбудить спящий поток 6) После завершения обработки текущего мейлбокса проверяется, есть ли активация в очереди активаций. Если есть, то берем из очереди активаций мейлбокс, а захваченный кладем в очередь активаций, если же очередь активаций была пустая, то обрабатываем захваченный мейлбокс

Из плюсов, может лишний раз не будить поток и обрабатывать сообщения в том же потоке.

Из минусов, если после использования SendESendingType::Lazy текущий мейлбокс будет долго обрабатываться, то это время добавиться к времени ожидания отправленного сообщения. Так как его мейлбокс захвачен потоком и не обрабатывается. Так же при сильной загрузки системы, когда очередь активаций всегда большая, отправленным сообщения будет добавляться летенси, так как мы не сразу отправляем сообщение, а ждем пока обработка мейлбокса закончится. И так как очередь акттиваций всегда не пустая, то мы с задержкой кладем мейлбокс в очередь активаций, хотя могли сделать это сразу.

Стоит использоваться желательно перед смертью актора, когда известно что больше он ничего обрабатывать не будет.

Для случаев, когда мы не хотим ждать окончания обработки мейлбокса или смерти актора, и хотим гарантировано обработать отправленное сообщение в том же потоке, следует использовать SendESendingType::Tail.

После обработки текущего сообщение, обработка мейлбокса прервется, и начнется обработка захваченного мейлбокса. При этом передается квота с которым обрабатывался первый мейлбокс. Благодаря этому не получится заблокировать поток двумя акторами пересылающими друг другу сообщения. В какой-то момент кончится квота по времени или по количеству обработанных сообщений.

SendESendingType::Tail работает следующим образом:

1) По получателю находится MailBox 2) Кладется сообщение в мейлбокс 3) Проверяется единсвенное ли это сообщение в мейлбоксе, если нет, то больше ничего не делаем 4) Захватываем мейлбоксa 5) Все остальные отправки сообщений будут работать как обычный Send 6) После завершения обработки текущего сообщения, прерывается обработка мейлбокса и начинается обработка захваченного мейлбокса с квотой старого мейлбокса 7) При завершении квоты, захваченный мейлбокс обрабатывается как в SendESendingType::Lazy

Требуется когда важно продолжить цепочку работы в следующем акторе пока кеши сообщения еще прогреты. По сравнению с SendESendingType::Lazy гарантировано продолжит обработку сообщения и не имеет проблем с задержкой обработки сообщения.