воскресенье, 18 января 2009 г.

Две статьи о многопоточности, которые следует прочитать

Первая статья Hans-J. Boehm "Threads Basics". Очень хороший рассказ о том, что же из себя представляет многопоточность в современных условиях (многоядерные системы, переупорядочивание инструкций как на уровне компилятора, так и на уровне процессора). В статье определяются понятия sequential consistency и data races. Буквально на пальцах объясняется назначение такой штуки, как fence (барьер памяти), и рассказывается, в каких случаях она должна использоваться. В общем, сильная статья, которая раскрывает глаза на то, какая же это сейчас сложная штука - многопоточность.

В дополнение к этой статье имеет смысл прочитать FAQ, который поддерживается тем же Hans-J. Boehm и Paul McKenney. Но этот FAQ посвящен только C/C++. А так же в статье есть ссылочка на C/C++ библиотеку atomic_ops, которую разрабатывает автор статьи.

Вторая статья Herb Sutter  "volatile vs. volatile" коротко и четко описывает, чем же различаются volatile в Java/.Net и C++, а так же о том, чем будут различаться atomic-типы и volatile в будущем стандарте C++0x.

Так же по ходу разбирательства с упомянутыми выше статьями мельком ознакомился с еще одной статьей Hans-J. Boehm "Reordering Constraints for Pthread-Style Locks". Статья сложная, с леммами, теоремами и доказательствами. Я ее читал позно вечером, поэтому смог осилить только введение и заключение (в котором показано, насколько могут снизить производительность неразумно используемые fences (барьеры памяти)) :(.

Комментариев нет: