Теория
Теория о процессах, потоках, конкурентности, параллелизме и т.д.: Asyncio. Мэтью Фаулер.
Кооперативная многозадачность – задачи сами определяют, когда передать управление. Если зависнет одна задача, полетит вся система.
Вытесняющая многозадачность – планировщик ОС сам выделяет время задачам поочередно. Высокие затраты на переключение контекста, зато если зависнет одна задача, остальные будут выполняться.
threading
Example: cataas.py.
Также можно создать класс, унаследованный Thread
, и переопределить в нём метод run()
. Пример – Решение задачи про философов при помощи Lock
.
threading.Lock
Для разграничения доступа к данным. Поддерживает контекстный менеджер.
threading.Semaphore
Семафор похож на блокировку в том смысле, что его можно захватывать и освобождать, а основное отличие заключается в том, что захватить семафор можно не один раз, а несколько, – максимальное число задаем мы сами. Под капотом семафор следит за этим пределом; при каждом захвате предел уменьшается, а при каждом освобождении увеличивается. Как только счетчик обращается в нуль, дальнейшие попытки захватить семафор блокируются, пока кто-то не выполнит операцию освобождения, которая увеличит счетчик. Можно считать, что блокировка – частный случай семафора с пределом 1.
multiprocessing
Example: cataas.py.
Задача об обедающих философах
Каждый философ может есть только двумя вилками. А пока он держит одну, находится в размышлениях. На иллюстрации приведена ситуация, когда каждый философ взял левую вилку, что создало deadlock.
Решение задачи при помощи Lock
.
📂 Operating Systems | Последнее изменение: 11.08.2024 10:26