AlekseyPy
Окт. 8, 2020 12:41:48
У меня асинхронно читаются файлы с диска (их всего порядка 200 штук), накапливая информацию из них в оперативной памяти. Поэтому чтобы не забилась память хочется ограничить количество одновременно читаемых файлов двумя штуками. Есть какой- то способ, чтобы это сделать?
AlekseyPy
Окт. 8, 2020 13:01:51
Rodegast
Используй потоки.
Асинхронность придумали не зря: программист сам указывает когда сделать переключение на другую задачу. А в случае потоков / процессов это делает ос в произвольные (а значит неоптимальные!) моменты времени. Причем совершенно не факт, что переключение происходит именно в момент ожидания: ос не анализирует ждет поток данные из памяти, с диска или “перемалывает цифры”, а тупо через определенный квант времени предоставляет ядро процессора другому потоку / процессу.
Rodegast
Окт. 8, 2020 15:33:59
> Асинхронность придумали не зря: программист сам указывает когда сделать переключение на другую задачу.
Асинхронность придумали не для этого.
> А в случае потоков / процессов это делает ос в произвольные (а значит неоптимальные!) моменты времени
Твоя программа будет работать не в “вакууме”, параллельно с ней могут быть запущены тысячи сторонних процессов. По этому ты не можешь предсказать какой момент времени будет оптимальным, а какой нет.
> ос не анализирует ждет поток данные из памяти, с диска или “перемалывает цифры”, а тупо через определенный квант времени предоставляет ядро процессора другому потоку / процессу.
Да ладно? В ядро встроено несколько планировщиков задач и планировщиков ввода-вывода. Они не просто переключает контекст, а работает по довольно сложному алгоритму.