НОУ ІНТУІТ, Лекція, Потоки (threads) та багатопоточне виконання програм (multi-threading)

Презентацію до цієї лекції Ви можете завантажити тут.

  • Історичний огляд багатопоточності
  • Моделі багатопоточного виконання
  • Проблеми, пов'язані з потоками
  • Потоки в POSIX (Pthreads)
  • Потоки в Solaris 2
  • Потоки у Windows 2000/XP
  • Потоки в Linux
  • Потоки в Java та .NET.

Однопотокові та багатопотокові процеси

потоки

Багатопотоковість має великі переваги:

Використання мультипроцесорних архітектур. Це особливо важливо в даний час, у період широкого використання багатоядерних гібридних та багатопроцесорних систем. Саме багатопоточність програм, заснована на багатоядерності процесора, дає можливість нарешті відчути реальні переваги паралельного виконання.

Історія багатопоточності

Як цікаво відзначити, один з перших кроків на шляху до широкого використання багатопоточності, мабуть, був зроблений в 1970-і роки радянськими розробниками комп'ютерної апаратури і програмістами. МВК "Ельбрус-1", розроблений у 1979 році, підтримував в апаратурі та операційній системі ефективну концепцію процесу, яка була близька до сучасного поняття полегшеного процесу. Зокрема процес в "Ельбрусі" однозначно характеризувався своїм стеком. Інакше кажучи, всі процеси були полегшеними та виконувались у загальному просторі віртуальної пам'яті – інших процесів у "Ельбрусі" просто не було!

Концепція багатопоточності почала складатися, мабуть, з 1980-х років. у системі UNIX та її діалектах. Найбільш розвинена багатопоточність була у діалекті UNIX фірми AT&T, на основі якого, як уже зазначалося в загальному історичному огляді, була розробленасистема Solaris. Все це відобразилося і в стандарті POSIX, в який увійшла багатопоточність, поряд з іншими базовими можливостями UNIX.

Далі, у середині 1990-х років. було випущено ОС Windows NT, у якому було також включена багатопоточність.

Однак у різних операційних системах API для багатопоточності суттєво відрізнялися. Тому багатопотокові програми, навіть написані мовами високого рівня, виявилися не переносимими з однієї платформи в іншу, що, зрозуміло, створювало великі незручності.

Очевидно, саме через розбіжності у специфікаціях і реалізаціях багатопоточності у різних системах професор Б'ярн Страуструпневключив багатопоточність у створений ним мову C++, що стала настільки популярною, та її базовий набір бібліотек. Програмісти мовою C++ були змушені, як і раніше, використовувати багатопоточність на рівні системних викликів і бібліотек конкретних операційних систем.

Платформа. NET, що з'явилася 2000 р., запропонувала свій механізм багатопоточності, який фактично є розвитком ідей Java.