Потёртая система с торчащими нитями
Thursday, 24 April 2008 09:14![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Одноядерные процессоры в персональных компьютерах морально устарели. Они останутся живы-здоровы в специальных устройствах, они ещё послужат лет двадцать в старых машинах, пока те не вымрут своей смертью, но впредь производительность настольных и карманных систем будет расти в основном за счёт параллелизма.
Сейчас мы пожинаем плоды переходного процесса.
Операционные системы освоили многозадачность ещё на древних одноядерных процессорах (даже без приставки микро-). Для пользователя процессы шли параллельно, но глубоко внутри царило жульничество: потоки просто делились на крошечные кусочки, которые смешивались в общую очередь и исполнялись по порядку. Это почти как настоящий параллелизм, но не совсем: в каждый момент времени исполняется только один поток.
Некоторых программистов это расслабляло, и они программировали многозадачность небрежно. Когда в массовое производство пошли многоядерные системы, это аукнулось. Так, я видел одну экзотическую Java-машину, которая на процессоре с гипертридингом изредка роняла весь компьютер в перезагрузку.
Теперь большинство разработчиков (у кого работодатели не жадные) работают минимум на двухъядерных рабочих станциях. Тут уже всякая небрежность синхронизации быстро вылазит на глаза глюками и зависаниями. Поэтому все нормальные программисты теперь учитывают реальный параллелизм.
Зато их программы начали блокироваться и глючить на одноядерных системах.
З-заразы.
Сейчас мы пожинаем плоды переходного процесса.
Операционные системы освоили многозадачность ещё на древних одноядерных процессорах (даже без приставки микро-). Для пользователя процессы шли параллельно, но глубоко внутри царило жульничество: потоки просто делились на крошечные кусочки, которые смешивались в общую очередь и исполнялись по порядку. Это почти как настоящий параллелизм, но не совсем: в каждый момент времени исполняется только один поток.
Некоторых программистов это расслабляло, и они программировали многозадачность небрежно. Когда в массовое производство пошли многоядерные системы, это аукнулось. Так, я видел одну экзотическую Java-машину, которая на процессоре с гипертридингом изредка роняла весь компьютер в перезагрузку.
Теперь большинство разработчиков (у кого работодатели не жадные) работают минимум на двухъядерных рабочих станциях. Тут уже всякая небрежность синхронизации быстро вылазит на глаза глюками и зависаниями. Поэтому все нормальные программисты теперь учитывают реальный параллелизм.
Зато их программы начали блокироваться и глючить на одноядерных системах.
З-заразы.
no subject
Date: Thursday, 24 April 2008 07:29 (UTC)no subject
Date: Thursday, 24 April 2008 07:33 (UTC)Из ярких примеров "хорошо на одном, плохо на двух" у меня только эта самая несановская Java-машина. Остальное - мелкие глюки с перерисовками интерфейса, конкретные примеры даже и не запоминал.
Обратный яркий пример вот на днях встретили в нашей собственной разработке (виснет на одноядерных), теперь пытаемся понять, как такое вообще могло получиться.
no subject
Date: Thursday, 24 April 2008 07:51 (UTC)Потому что, когда хорошо на одном и плохо на двух - это понятно, это вероятность race растет. А вот наоборот - это уже не понятно, потому что виснет - это, по идее, дедлок; но для дедлока нужна блокировка, а она работает и на мультиядре, т.е. там тоже должно виснуть...
no subject
Date: Thursday, 24 April 2008 08:00 (UTC)Хотя, по идее, ожидание на семафоре или Sleep должны бы пускать поработать и низкоприоритетные потоки, тупого же зацикливания у нас нету - процессор свободен...
no subject
Date: Thursday, 24 April 2008 08:23 (UTC)no subject
Date: Thursday, 24 April 2008 08:45 (UTC)no subject
Date: Thursday, 24 April 2008 08:31 (UTC)Не стали разбираться дальше, просто исправили изначально некорректную отправку event'а.
no subject
Date: Thursday, 24 April 2008 08:43 (UTC)no subject
Date: Thursday, 24 April 2008 09:02 (UTC)no subject
Date: Thursday, 24 April 2008 13:58 (UTC)no subject
Date: Thursday, 24 April 2008 08:11 (UTC)А так как все к тому времени уже привыкнут к многоядерным процам, новые процы будут их аппаратно имитировать:))))
no subject
Date: Thursday, 24 April 2008 08:19 (UTC)no subject
Date: Thursday, 24 April 2008 08:20 (UTC)no subject
Date: Thursday, 24 April 2008 08:19 (UTC)Что значит "программировали многозадачность"? Писали реализацию спинлоков и семафоров? А кто такой экзотикой занимается, кроме авторов виртуальных машин и операционок?
no subject
Date: Thursday, 24 April 2008 08:22 (UTC)А остальные просто не ставили синхронизации везде, где нужно - мол, пока я читаю и инкрементирую переменную, никто другой её не тронет.