
Sergey
01.11.2017
08:41:17
и HashTable состоит из бакетов, по одному на каждый элемент

Алексей
01.11.2017
08:41:31
typedef struct _hashtable {
uint nTableSize;
uint nTableMask;
uint nNumOfElements;
ulong nNextFreeElement;
Bucket *pInternalPointer;
Bucket *pListHead;
Bucket *pListTail;
Bucket **arBuckets;
dtor_func_t pDestructor;
zend_bool persistent;
unsigned char nApplyCount;
zend_bool bApplyProtection;
#if ZEND_DEBUG
int inconsistent;
#endif
} HashTable;
Старая версия

Google

Pavel
01.11.2017
08:42:28

Алексей
01.11.2017
08:42:50
typedef struct _HashTable {
uint32_t nTableSize;
uint32_t nTableMask;
uint32_t nNumUsed;
uint32_t nNumOfElements;
zend_long nNextFreeElement;
Bucket *arData;
uint32_t *arHash;
dtor_func_t pDestructor;
uint32_t nInternalPointer;
union {
struct {
ZEND_ENDIAN_LOHI_3(
zend_uchar flags,
zend_uchar nApplyCount,
uint16_t reserve)
} v;
uint32_t flags;
} u;
} HashTable;
Из 7
typedef struct _Bucket {
zend_ulong h;
zend_string *key;
zval val;
} Bucket;

Sergey
01.11.2017
08:43:54
и если ты сделаешь unset в нумерованном массиве, то ничего не поменяется в структуре. удалится один бакет. точнее не удалится, а поменяет тип

Vladislav
01.11.2017
08:44:30
This discovery has somewhat troubled me, because it means there is NO datatype in PHP that has normal C array characteristics. Now most of the time this is ok, because hash lookups are very faster, but it's faults show through in cases like array_rand

Алексей
01.11.2017
08:45:17

Sergey
01.11.2017
08:45:29
http://php.net/manual/en/class.splfixedarray.php есть такое, но исходники не лазил смотреть у него если честно

Алексей
01.11.2017
08:46:10
Внутри zval?

Vladislav
01.11.2017
08:47:13
внутри zval тоже массив юзается чтобы хранить инфу про массив)

Sergey
01.11.2017
08:47:52

Google

Алексей
01.11.2017
08:48:33
Нужно смотреть

Sergey
01.11.2017
08:48:55
это типа если ты сделал массив на тысячу элементов, а потом на каждый элемент сделал unset, то у тебя будет тысяча undefined в структуре

Vladislav
01.11.2017
08:49:28
до того как сборщик почистил?

Sergey
01.11.2017
08:51:12
не совсем, там в определенный момент структура начинает делать shrink или аллокейтить новую структуру
хотя нет, он только расширяться умеет

Vladislav
01.11.2017
08:54:00
ну вот, крч надо читать и смотреть)
просто если алокейтить каждый раз - куча времени уйдет

Sergey
01.11.2017
08:54:39
то что при unset не будет новую структуру создавать это я тебе гарантирую

Алексей
01.11.2017
08:55:21
Ну unset же не освободит память?

Vladislav
01.11.2017
08:55:26
ну так крч меня обвинили зря
нет

Sergey
01.11.2017
08:55:35

Vladislav
01.11.2017
08:55:37
он просто уменьшит колчество ссылок

Andrey
01.11.2017
08:55:41
https://medium.com/p/9dda7af674cd

Vladislav
01.11.2017
08:55:48
когда будет -0 - почистит колектор

Sergey
01.11.2017
08:55:59

Andrey
01.11.2017
08:56:09
Ну мы юзаем
Но не замеряли

Sergey
01.11.2017
08:56:46

Google

Andrey
01.11.2017
09:00:07
Кстати, раз за демоны заговорили. Проблему с тем, что при долгом отсутствии джоб для демона, отваливается коннект к базе по таймауту решаете периодическими пингами?

Sergey
01.11.2017
09:00:18
реконнектами

Andrey
01.11.2017
09:01:29
эх. У меня любимый фалькон, который тупо игнорит такие вещи. Pdo просто выбрасывает warning, и орм игнорит этот кейс, типа нет результатов запроса.

Sergey
01.11.2017
09:02:25
никогда б не пошел на проект где есть фалькон)

Andrey
01.11.2017
09:02:49
все мы были молоды и глупы)

Pavel
01.11.2017
09:06:32

Andrey
01.11.2017
09:06:51

Алексей
01.11.2017
09:08:43

Andrey
01.11.2017
09:09:01
А причины?)

Sergey
01.11.2017
09:09:01

Andrey
01.11.2017
09:09:52
дебаг, архитектура, орм

Sergey
01.11.2017
09:10:49
если разрабов на go/java/kotlin/whatever найти довольно легко или если пхпшник перейдет на них для него будет перспектива развития, то в случае с фальконом это такой себе шаг в 2010й год

Sergey
01.11.2017
09:10:59
во времена первой зенды

Andrey
01.11.2017
09:12:49
ну нет. Там сильно имеет отклик принципы развития аля ларавель
типа мы так решили, и нам плевать

Vladislav
01.11.2017
09:13:04
Вопрос: ты кинул дс на пхп, вы юзаете их ?

Andrey
01.11.2017
09:14:06
да

Vladislav
01.11.2017
09:32:49
Они чистятся тогда когда количество реал элементов и всех равно
Если же нет андефайнд - алокейт дабл память

Google

Sergey
01.11.2017
09:39:43
там правда заменятся undef на not initialized и все
но размер меньше не станет

Vladislav
01.11.2017
09:40:44
Инфа
И в хэштаюлица внутри юзает эррэй
Вот почему при удалении андефайнед

Sergey
01.11.2017
09:44:20
Не заменяется
че это? он их удалит и сколько их удалил сделает новых not initialized в конце

Admin
ERROR: S client not available

Sergey
01.11.2017
09:44:43
чтобы nTableSize осталось таким же
размер таблицы не должен поменяться в общем после удаления этих пустышек

Виктор
01.11.2017
09:51:24

Vladislav
01.11.2017
09:52:53
It is, but only as long as only insertion operations are performed. If an element is deleted from a hashtable, we obviously don’t want to move all elements in arData that occur after the deleted element in order to have a continuous array again. Instead we simply mark the deleted value with an IS_UNDEF zval type.
и вот 2 часть

Sergey
01.11.2017
09:53:29
One problem with the current implementation is that arData never shrinks (unless explicitly told to). So if you create an array with a few million elements and remove them afterwards, the array will still take a lot of memory. We should probably half the arData size if utilization falls below a certain level.

Vladislav
01.11.2017
09:53:32

Google

Sergey
01.11.2017
09:55:20

Алексей
01.11.2017
09:56:08

Vladislav
01.11.2017
09:56:53

Sergey
01.11.2017
09:57:10
Они чистятся тогда когда количество реал элементов и всех равно

Алексей
01.11.2017
09:58:49
https://nikic.github.io/2014/12/22/PHPs-new-hashtable-implementation.html
Вернее https://nikic.github.io/2014/12/22/PHPs-new-hashtable-implementation.html#order-of-elements

Vladislav
01.11.2017
09:59:02
та мы это и читаем)

Алексей
01.11.2017
09:59:10
а
я просто в дороге был
Только в офис закатил

Vladislav
01.11.2017
09:59:27
та я вот не могу понять, если оно дропает андеф, то идет шифт массива?

Алексей
01.11.2017
09:59:34
и давай тут синьоров дрочить за ансет

Vladislav
01.11.2017
09:59:37
мне кажется это не должно так работать
а они не знают ))909)))

Алексей
01.11.2017
09:59:54
никто даже около ничего не сказал

Vladislav
01.11.2017
10:00:40
крч интересно как оно дропает андеф

Алексей
01.11.2017
10:01:01
А мне интересно что происходит с мемори
Потому что насколько я понмю - ничего

Sergey
01.11.2017
10:01:14

Алексей
01.11.2017
10:01:24
и юзать ансет для оптимизации - ничего не даст

Vladislav
01.11.2017
10:01:41