Показать сообщение отдельно
Старый 27.08.2013, 15:02   #12  
abark is offline
abark
Участник
 
14 / 10 (1) +
Регистрация: 26.06.2013
Адрес: Волгоград
Видимо стандартный алгоритм класса SystemSequence, который ведет буфер зарезервированных идентификаторов внутри AOS-а, работает следующим образом:
X++:
   AOS    getBufferSize  ,         BufferSize

Для примера для bufferSize = 250 будет такая трассировка:
1. делаем flushCache() --> N = 0 (количество неиспользованных идентификаторов), SystemSequence.NextVal = 10000000
2. первое выделение nextVal()
2.1. т.к. N = 0 < 250, то выделяем очередной блок --> N = 250, SystemSequence.NextVal = 10000250
2.2. используем первый из полученных идентификаторов, в итоге N = N-1 = 249
3. второе выделение nextVal()
3.1. т.к. N=249 < 250, то выделяем очередной блок --> N = 249 + 250 = 499, SystemSequence.NextVal = 10000500
3.2. используем очередной из полученных идентификаторов, в итоге N = N-1 = 498
4. очередное выделение nextVal()
4.1. т.к. N=498 > 250, то больше новых блоков пока не выделяем --> N = 498, SystemSequence.NextVal = 10000500
4.2. используем очередной из полученных идентификаторов, в итоге N = N-1 = 497

При нескольких AOS-ах поведение каждого отдельного AOS-а подчиняется тому же самому алгоритму.