Я почти уверен, что совет «сила 2» основан на ошибке при редактировании и не должен восприниматься как требование .
Этот конкретный совет был добавлено в документацию по Python 2.5 (и перенесено в документы Python 2.4.3 ) в ответ на выпуск Python # 756104 .Репортер использовал неоправданно большой размер буфера для socket.recv()
, что вызвало обновление.
Это был Тим Питерс, который ввел понятие «сила 2»:
Я ожидаюВы единственный человек в истории, который попытался передать такое большое значение в recv () - даже если бы это работало, вам почти наверняка не хватило бы памяти, пытаясь выделить буферное пространство для 1,9 ГБ.сокеты - это средство низкого уровня, и принято передавать относительно небольшую степень 2 (для лучшего соответствия аппаратным и сетевым реалиям).
(выделение жирным шрифтом),Я работал с Тимом, и у него огромный опыт работы с сетевым программированием и аппаратным обеспечением, поэтому, вообще говоря, я бы взял его слово, когда делал такое замечание.Он особенно любил стек Windows 95, он назвал его своей канарейкой в шахте за ее способность терпеть неудачу при стрессе.Но обратите внимание, что он говорит, что обычно , а не требуется для использования мощности 2.
Эта формулировка привела к обновлению документации:
Это ошибка документации;что-то, о чем пользователь должен быть «предупрежден».
Это поймало меня однажды, и два разных человека спросили об этом в #python, так что, возможно, мы должны добавить что-то вроде следующего в документацию по recv ().
"" "*
Для лучшего соответствия с аппаратными и сетевыми реалиями значение «буфера»
должно быть относительно небольшим: 2,
, например, 4096.
"" "
Если вы считаете,формулировка правильная, просто назначьте мне ошибку, я позабочусь об этом.
Никто не оспаривал здесь утверждение о степени 2, но редактор отошел от itобычно от до должно быть в промежутке нескольких ответов.
Для меня, те, кто предлагал обновление документации, были более заинтересованы в том, чтобы убедиться, что вы используете небольшой буфер , а не то, является ли это степенью 2. Это не значит, что это нехорошо совет однако;Любой низкоуровневый буфер, который взаимодействует с ядром, выигрывает от выравнивания со структурами данных ядра.
Но, хотя вполне может существовать эзотерический стек, где буферы с размером, равным степени 2, имеют значение даже больше, ясомнение Тим Питерс когда-либо имел в виду, что его опыт (это обычная практика ) должен быть выражен в таких железных терминах.Просто игнорируйте его, если другой размер буфера имеет больше смысла для конкретных случаев использования.