Я заметил в этот пример аннотация, которая $this->rows[]=$row;
в строке 15 будет сегфо. Но я не понимаю почему. Может ли кто-нибудь объяснить это мне?
Он будет либо неисправен, либо будет вести себя неожиданно (текущие версии не должны отказывать).
Причина в том, что член $this->rows
не является потокобезопасным массивом, это обычный массив.
Обычные массивы сериализуются для хранения как элемент объекта, поэтому
$this->array[] = $row;
Не имеет смысла; Вы не можете добавить в сериализованный массив.
В примере это строит $rows
в области видимости метода и устанавливает член объекта сразу с $this->rows = $rows;
,
Потокобезопасный массив, который является многопоточным объектом (все они ведут себя как массивы и имеют некоторые разумные методы манипулирования, такие как pop и shift), не имеет одинакового ограничения.
Согласно порицание инструмент на Github, мы должны попробовать пейджинг Джо Уоткинс (@Krakjoe) …
Редактировать: самостоятельно, «нехватка памяти» является лучшей идеей, которую я могу придумать. (Погуглил строку, о которой идет речь, единственный полезный результат касался низкого предела памяти)