@symfony_php

Страница 373 из 1418
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

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

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



Sergey
01.11.2017
08:47:52
Баккет?
да, будет undefined тип

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
https://medium.com/p/9dda7af674cd
эт активно обсуждали на реддите, даже чуваки из php-src, но все затухло

Andrey
01.11.2017
08:56:09
Ну мы юзаем

Но не замеряли

Sergey
01.11.2017
08:56:46
когда будет -0 - почистит колектор
когда хештаблица будет пустая то да

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
так что не гоните на нелмио апи док 3.0 норм бандл, еще засабмичу 3 пул реквеста в формы и вообще отлично будет работать
А он умеет такое? Нужно разным пользователям с разными правами показывать только ту часть доки к которой они должны иметь доступ. Такое в принципе можно реализовать?

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.

Google
Sergey
01.11.2017
09:55:20
так а где там про то, что undef -> not initalized
если удалили undef и tableSize never shrinks, то логично предположить что он забьется not initialized до всего размера

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
та я вот не могу понять, если оно дропает андеф, то идет шифт массива?
когда кол-во элементов равно тому сколько было задано в таблице, тогда делается compact и удаляются undef. таблица уменьшать свой размер не умеет, поэтому оно забьет до конца все not initialized элементами

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

Страница 373 из 1418