Я тут прочел, что python использует GIL, и одной из причин является тот факт, что ссылки на каждый объект подсчитываются и это не потокобезопасно. Почему подсчет ссылок не безопасен? Так же я прочел, что:
Проблема, которую решает GIL, связана с тем, что в многопоточном приложении сразу несколько потоков могут увеличивать или уменьшать значения этого счётчика ссылок. Это может привести к тому, что память очистится неправильно и удалится тот объект, на который ещё существует ссылка.
Как это может произойти? Правильно ли я понимаю, что если два потока случайно выполняют что-то типа
counter++
одновременно, то счетчик увеличивается не на 2, а на 1?
И еще:
Но добавление блокировки к нескольким объектам может привести к появлению другой проблемы — взаимоблокировки (англ. deadlocks), которая получается только если блокировка есть более чем на одном объекте. К тому же эта проблема тоже снижала бы производительность из-за многократной установки блокираторов.
Объясните в чем тут суть? И в чем снижение производительности? В том что вы просто установили какой-то там флаг?