наименьшее количество множеств. И в них было максимальное количество элелементов
1. У нас есть CPU с, допустим, 4 ядрами. В моем текущем понимании это означает возможность выполнять истинно параллельно 4 потока операций.
пока работает какой-то поток/процесс, они отправляют по общей шине событий операции в конвейеры ядер?
По сути, обычный механизм кооперативной многозадачности без выигрыша в скорости вычисления (т.к. параллелизма тут нет). Если так, то для чего такие потоки нужны (чем они полезны) и как их реализовать, допустим, в Python?
Голодания потоков были. Было просто некорректное исполнение. Была неоптимальность в реализации
локов.
Если это твой собственный код (ты - сам писал) то такие точки отследить не очень сложно. Это
обычно разделяемые области памяти. И ты из знаешь поскольку ты - писал код.
Санитайзеры и статик-чекеры кода - обычно идут для чужого кода или для очень-очень большого
проекта где работают десятки людей и трудно держать все под контролем.
Но в принципе хорошее правило написали ниже - накрывай все разделяемые куски кода и данных мьютексами и это концептуально решает проблему. Вопрос перформанса можно обсудить.
Дополнительно - работа с атомиками как ускорение некоторых операций. Тоже обсуждается с кодом
вместе.
И помним о "проблеме останова". В общем случае глядя на код мы не можем доказать какое-то
свойство программы. Только запуск программы является доказательством ее (прогаммы) правоты.