kruall 37785d3b5b Improve benchmarks, KIKIMR-19207 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 39be171bb2 Report actor usage activity KIKIMR-11082 1 year ago
actor.h 7082400c05 Add local activation queues, KIKIMR-19207 1 year ago
actor_benchmark_helper.h 37785d3b5b Improve benchmarks, KIKIMR-19207 1 year ago
actor_bootstrapped.cpp dafdfd006b actors object model 2 years ago
actor_bootstrapped.h f6785ed3c5 actor instance custom name 1 year ago
actor_coroutine.cpp 77d1c23a56 Fix ThreadSanitizer for coroutine actors 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 33421d6381 revert light events 1 year ago
actorid.cpp d507a9366b Restoring authorship annotation for <pkalinnikov@yandex-team.ru>. Commit 2 of 2. 2 years ago
actorid.h 5db281b96a Add GroupOverseer component for testing 2 years ago
actorsystem.cpp 13b907fcea Revert commit rXXXXXX, Revert commit rXXXXXX,use profile tags for any method actor name generation 1 year ago
actorsystem.h ba9a310064 Add several pools for one thread, KIKIMR-18440 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 2e77ddea28 AS1.4, 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 479969abb5 Search in hashmap benchmark 1 year ago
buffer.cpp 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
buffer.h 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
callstack.cpp 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
callstack.h d570836295 Remove extra semicolon (library) 1 year ago
config.h ba9a310064 Add several pools for one thread, KIKIMR-18440 1 year ago
cpu_manager.cpp ba9a310064 Add several pools for one thread, KIKIMR-18440 1 year ago
cpu_manager.h ba9a310064 Add several pools for one thread, KIKIMR-18440 1 year ago
cpu_state.h e5d4696304 Restoring authorship annotation for <serxa@yandex-team.ru>. Commit 2 of 2. 2 years ago
defs.h 39be171bb2 Report actor usage activity KIKIMR-11082 1 year ago
event.cpp 33421d6381 revert light events 1 year ago
event.h 68531f6882 improve code navigation for flags usage 1 year ago
event_load.cpp 8c8a4c1d7d guard for memory markers + split actor type operators 1 year ago
event_load.h b11444b99a Improve payload wire encoding and XDC selection KIKIMR-18394 1 year ago
event_local.h 33421d6381 revert light events 1 year ago
event_pb.cpp 0cdd7c9ab8 Fix coroutine event serializer 1 year ago
event_pb.h b11444b99a Improve payload wire encoding and XDC selection KIKIMR-18394 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 33421d6381 revert light events 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 7082400c05 Add local activation queues, KIKIMR-19207 1 year ago
executor_pool_base.h e4028d4db9 Revert commit rXXXXXX, Introduce perfect activation queue 1 year ago
executor_pool_basic.cpp 7082400c05 Add local activation queues, KIKIMR-19207 1 year ago
executor_pool_basic.h 7082400c05 Add local activation queues, KIKIMR-19207 1 year ago
executor_pool_basic_feature_flags.h 7082400c05 Add local activation queues, KIKIMR-19207 1 year ago
executor_pool_basic_ut.cpp 6519925862 KIKIMR-18568: internal control stats pool size limit 1 year ago
executor_pool_io.cpp e4028d4db9 Revert commit rXXXXXX, Introduce perfect activation queue 1 year ago
executor_pool_io.h e4028d4db9 Revert commit rXXXXXX, Introduce perfect activation queue 1 year ago
executor_pool_united.cpp e4028d4db9 Revert commit rXXXXXX, Introduce perfect activation queue 1 year ago
executor_pool_united.h af0ed98ed9 Refactor sending and registration methods, 1 year ago
executor_pool_united_ut.cpp 6519925862 KIKIMR-18568: internal control stats pool size limit 1 year ago
executor_pool_united_workers.h ba9a310064 Add several pools for one thread, KIKIMR-18440 1 year ago
executor_thread.cpp 7082400c05 Add local activation queues, KIKIMR-19207 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 fd58b11067 DC awareness 2 years ago
interconnect.h 8d15e67485 Introduce distributed configuration KIKIMR-19031 1 year ago
invoke.h 81455e7b2b KIKIMR-18568: remove dependency library/cpp/actors to ydb/core/protos 1 year ago
io_dispatcher.cpp 33421d6381 revert light events 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 1d01d1e855 KIKIMR-18932:special verification for formatted stream writing 1 year ago
log.h 94c58b86cb fix usage for non NActors namespace using 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 cee4a99ba9 add-log-buffer 2 2 years ago
log_settings.h d570836295 Remove extra semicolon (library) 1 year ago
log_ut.cpp 33421d6381 revert light events 1 year ago
mailbox.cpp e4028d4db9 Revert commit rXXXXXX, Introduce perfect activation queue 1 year ago
mailbox.h e4028d4db9 Revert commit rXXXXXX, Introduce perfect activation queue 1 year ago
mailbox_queue_revolving.h 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
mailbox_queue_simple.h 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
mon.h 3eef01c816 intermediate changes 2 years ago
mon_stats.h 39be171bb2 Report actor usage activity KIKIMR-11082 1 year ago
mon_ut.cpp a65aef1c04 Fix serialization for external data channel, 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 f3c5bbbd24 Fix data races, 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 81455e7b2b KIKIMR-18568: remove dependency library/cpp/actors to ydb/core/protos 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 af0ed98ed9 Refactor sending and registration methods, 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 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
scheduler_cookie.h 3bf10d3f40 Restoring authorship annotation for <ddoarn@yandex-team.ru>. Commit 2 of 2. 2 years ago
scheduler_queue.h af0ed98ed9 Refactor sending and registration methods, 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
worker_context.cpp e5d4696304 Restoring authorship annotation for <serxa@yandex-team.ru>. Commit 2 of 2. 2 years ago
worker_context.h ba9a310064 Add several pools for one thread, KIKIMR-18440 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 гарантировано продолжит обработку сообщения и не имеет проблем с задержкой обработки сообщения.