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

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 гарантировано продолжит обработку сообщения и не имеет проблем с задержкой обработки сообщения.