Теория

Теория о процессах, потоках, конкурентности, параллелизме и т.д.: Asyncio. Мэтью Фаулер.

Кооперативная многозадачность – задачи сами определяют, когда передать управление. Если зависнет одна задача, полетит вся система.

Вытесняющая многозадачность – планировщик ОС сам выделяет время задачам поочередно. Высокие затраты на переключение контекста, зато если зависнет одна задача, остальные будут выполняться.


threading

Example: cataas.py.

threads = []  
for i in range(CATS_QTY):  
    thread = threading.Thread(  
        target=download_image,  
        args=(  
            CAT_URL,  
            OUT_PATH.format(uuid.uuid4()),  
        ),  
    )  
    thread.start()  
    threads.append(thread)  
  
[thread.join() for thread in threads]

Также можно создать класс, унаследованный Thread, и переопределить в нём метод run(). Пример – Решение задачи про философов при помощи Lock.

threading.Lock

Для разграничения доступа к данным. Поддерживает контекстный менеджер.

threading.Semaphore

Семафор похож на блокировку в том смысле, что его можно захватывать и освобождать, а основное отличие заключается в том, что захватить семафор можно не один раз, а несколько, – максимальное число задаем мы сами. Под капотом семафор следит за этим пределом; при каждом захвате предел уменьшается, а при каждом освобождении увеличивается. Как только счетчик обращается в нуль, дальнейшие попытки захватить семафор блокируются, пока кто-то не выполнит операцию освобождения, которая увеличит счетчик. Можно считать, что блокировка – частный случай семафора с пределом 1.


multiprocessing

Example: cataas.py.

processes = []  
for i in range(CATS_QTY):  
    process = multiprocessing.Process(  
        target=download_image,  
        args=(  
            CAT_URL,  
            OUT_PATH.format(uuid.uuid4()),  
        ),  
    )  
    process.start()  
    processes.append(process)  
  
[process.join() for process in processes]

Задача об обедающих философах

Каждый философ может есть только двумя вилками. А пока он держит одну, находится в размышлениях. На иллюстрации приведена ситуация, когда каждый философ взял левую вилку, что создало deadlock.

Решение задачи при помощи Lock.


📂 Operating Systems | Последнее изменение: 11.08.2024 10:26