Biased lock используется при первой синхронизации на данном объекте. Он CAS'ом выставляет threadId в специальном поле объекта. Если там уже есть threadId, то блокировка раздувается до thin lock.
А вероятность получить fat lock сильно зависит от contention rate.
Synchronized с 1.6 неплохо продвинулись в скорости, подойдя к j.u.c.ReentranceLock.
Оно при старте вообще biased lock, т. е. почти ничего не стоит, пока работаешь с объектом в одном потоке. При попытке захвата лока из другого потока переходит в thin-lock, который использует CAS (оптимистичный подход). Если оптимистичный подход работает плохо, то lock разувается до thick (fat) lock'а с использованием примитивов OS.
Для старых игрушек (типа Valve Sorce-based, Prey, TES5) Intel HD3000 вполне хватает. К сожалению, под wine fps низковат.
На Lenovo x220 Prey на максимальных настройках не тянет система охлаждения, а не интегрированное видео. За 2-3 часа разогревается прилично.
Особенно, учитывая, что конструкция замыкает два независимых радиатора силовых транзисторов, которым вполне могут быть в разных контурах, убивая гальваническую развязку блока питания. И никто не гарантирует стабильность работы ИБП после такого, если исходно радиаторы не были связаны (у транзисторов в TO-220 обычно коллектор или сток на корпусе).
В Java всё довольно просто, есть Java Memory Model, описанная в Java Language Specification. Есть строго прописанное соотношение «happened before», есть понятные и простые примитивы синхронизации. Ничего особо страшного и сложного. Опять же хорошо прописаны условия видимости изменений.
Из плюсов: все грабли хорошо расписаны в классической литературе и почти не меняются от версии к версии.
Для интересующихся рекомендую JCIP (http://www.javaconcurrencyinpractice.com/) и JLS (http://docs.oracle.com/javase/specs/).
Gitosis не нужен. Есть gitolite.
Настраивается легко, проект живой, стабильный. Автор отзывчивый, принимает патчи, отвечает на вопросы. И хороший mailing list.
Не всегда у разработчика есть доступ к этому самому «основному потоку», например, в контейнерах приложений. В этом случае инициализация дорогого ресурса (e. g. ConnectionFactory) будет производится из многопоточного окружения.
Есть, то есть. Но и написание биндингов ручками для lua и python не составляет труда.
Актуально, когда библиотека чужая и нет возможности править её хидеры.
А вероятность получить fat lock сильно зависит от contention rate.
Оно при старте вообще biased lock, т. е. почти ничего не стоит, пока работаешь с объектом в одном потоке. При попытке захвата лока из другого потока переходит в thin-lock, который использует CAS (оптимистичный подход). Если оптимистичный подход работает плохо, то lock разувается до thick (fat) lock'а с использованием примитивов OS.
У майкрософта есть часть патентов, поэтому они вполне могут иметь договоренности с MPEG LA и ставить его «из коробки».
На Lenovo x220 Prey на максимальных настройках не тянет система охлаждения, а не интегрированное видео. За 2-3 часа разогревается прилично.
Из плюсов: все грабли хорошо расписаны в классической литературе и почти не меняются от версии к версии.
Для интересующихся рекомендую JCIP (http://www.javaconcurrencyinpractice.com/) и JLS (http://docs.oracle.com/javase/specs/).
Настраивается легко, проект живой, стабильный. Автор отзывчивый, принимает патчи, отвечает на вопросы. И хороший mailing list.
Актуально, когда библиотека чужая и нет возможности править её хидеры.