История изменений
Исправление i-rinat, (текущая версия) :
Чтение по байту медленнее, чем чтение большими кусками. Так везде, даже если ты будешь голыми системными вызовами пользоваться (особенно если ты будешь голыми системными вызовами пользоваться). Потому что цена системного вызова — не ноль. Даже если ты используешь буферизацию из рантайма языка или из библиотеки, обслуживающий код тоже ненулевой, и он сколько-то выполняется. Чем больше ты его вызываешь, тем больше платишь.
Почему бы эту абстракцию не взять на себя ядру
Дык, оно берёт. Иначе просадки скорости были бы жуткими. (Заметно было на Turbo Pascal под DOS. Там если код работы с файлами не использовал BlockRead()/BlockWrite(), скорость была никакая.)
но почему бы не сделать это в рамках реализации чтобы не было разницы посимвольно ты читаешь поток или кусками?
Наверное, могли как-то макросами реализовать, чтобы код буферизации не нужно было вызывать, а он встраивался прямо в твой код. В sbcl же есть макросы?
Исправление i-rinat, :
Чтение по байту медленнее, чем чтение большими кусками. Так везде, даже если ты будешь голыми системными вызовами пользоваться (особенно если ты будешь голыми системными вызовами пользоваться). Потому что цена системного вызова — не ноль. Даже если ты используешь буферизацию из рантайма языка или из библиотеки, обслуживающий код тоже ненулевой, и он сколько-то выполняется. Чем больше ты его вызываешь, тем больше платишь.
Почему бы эту абстракцию не взять на себя ядру
Дык, оно берёт. Иначе просадки скорости были бы жуткими.
но почему бы не сделать это в рамках реализации чтобы не было разницы посимвольно ты читаешь поток или кусками?
Наверное, могли как-то макросами реализовать, чтобы код буферизации не нужно было вызывать, а он встраивался прямо в твой код. В sbcl же есть макросы?
Исправление i-rinat, :
Чтение по байту медленнее, чем чтение большими кусками. Так везде, даже если ты будешь голыми системными вызовами пользоваться (особенно если ты будешь голыми системными вызовами пользоваться). Потому что цена системного вызова — не ноль. Даже если ты используешь буферизацию из рантайма языка или из библиотеки, обслуживающий код тоже ненулевой, и он сколько-то выполняется. Чем больше ты его вызываешь, тем больше платишь.
Почему бы эту абстракцию не взять на себя ядру
Дык, оно берёт. Иначе просадки скорости были бы жуткими.
Исходная версия i-rinat, :
Чтение по байту медленнее, чем чтение большими кусками. Так везде, даже если ты будешь голыми системными вызовами пользоваться (особенно если ты будешь голыми системными вызовами пользоваться). Потому что цена системного вызова — не ноль. Даже если ты используешь буферизацию из рантайма языка или из библиотеки, обслуживающий код тоже ненулевой, и он сколько-то выполняется. Чем больше ты его вызываешь, тем больше платишь.