Вход на сайт
Операционка - однопоточность и многопоточность
640 просмотров
Перейти к просмотру всей ветки
в ответ gendy 16.11.09 13:52, Последний раз изменено 17.11.09 03:53 (Tir na nOg)
В ответ на:
многопоточность имеет смысл только на многопроцессорных системах с раздачей потоков по процессорам, если это поддерживается операционкой
многопоточность имеет смысл только на многопроцессорных системах с раздачей потоков по процессорам, если это поддерживается операционкой
Хи-хи. Согласно твоей логике, три потока в программе следует делать, когда есть три ядра, а четыре, когда четыре и дальше по аналогии. -))))
Вабще-та, многопоточность имеет смысл всегда, когда нужны легковесные процессы. Хороший пример - высокопроизводительный сервер, где становятся критичными затраты на порождение процессов, обрабатывающие запросы клиентов. По грубым прикидкам, которые любят указывать в литературе, в среде UNIX затрачиваемое время на создание процесса примерно в 100 раз больше, чем на создание потока.
В ответ на:
Понятия не имею каким образом. На двух ядрах быстрее кодируется, чем на одном.
Понятия не имею каким образом. На двух ядрах быстрее кодируется, чем на одном.
Потоки к ядрам отношения не имеют.
В ответ на:
Хорошо, а если вот какой пример на то, что от многопоточности производительность программы, приложения или некого интерфэйса не увеличивается. Предположим, в некоей фирме есть база данных, и если директору, бухгалтеру и паре торговых агентов вдруг одновременно приспичит к ней обратиться, причем к одинаковым ресурсам в ней, я думаю у базы данных может наступить клинч, если еще и разработчик не предусмотрел подобного варианта. Такой пример пойдет?
Хорошо, а если вот какой пример на то, что от многопоточности производительность программы, приложения или некого интерфэйса не увеличивается. Предположим, в некоей фирме есть база данных, и если директору, бухгалтеру и паре торговых агентов вдруг одновременно приспичит к ней обратиться, причем к одинаковым ресурсам в ней, я думаю у базы данных может наступить клинч, если еще и разработчик не предусмотрел подобного варианта. Такой пример пойдет?
Нет, не пойдёт. Многопоточность и обеспечение целостности БД это как тёплое и мягкое. Первое - инструмент для программиста, второе - цель, которая обеспечивается рядом мер. Биты, байты, вольты и амперы - примерно также нужны для обеспечения целостности БД. Т.е. утверждать, что совсем без них оно всё обходится - не совсем верно, а сказать, что они используются - можно, но бессмысленно. -)
В ответ на:
Я продолжаю просматривать ресурсы Интернета на поиск примеров, где многопоточность не увеличивает производительность программы - пока все вода водой, одна теория.
Я продолжаю просматривать ресурсы Интернета на поиск примеров, где многопоточность не увеличивает производительность программы - пока все вода водой, одна теория.
Придумайте сами абсолютно любое действие, выполнение которого не параллелится по потокам и вы приведёте абсолютно корректный пример, где многопоточность ОС не даст никакого выигрыша. Возьмите быструю сортировку массива - действие потенциально отлично распараллеливающееся. Напишите на С фунцкию сортировки, откомпилируйте gcc и вы получите код, которому до лампочки способность ОС создавать потоки.
Короче, абсолютно всё, что написано обычным образом без использования потоков и без использования специальных средств автоматически распараллеливающих однопоточный код по потокам (как пример: Data Parallel Haskell - расширение компилятора языка Haskell, "Glasgow Haskell Compiler", которое параллелит "обычный" код) не получит выигрыша от способности ОС создавать потоки.
В ответ на:
Ну так обьесните, или вас нехватает на более чем кинуть ссылку?
Ну так обьесните, или вас нехватает на более чем кинуть ссылку?
Так он же тебе объяснил. У тебя перемешались в одну кучу потоки, параллелизм и многозадачность.
Программы не поддерживают многопоточность, они её могут использовать, а могут и не использовать, как пожелает писавший их программист. Поток это такое средство в ос, типа процесса, только кастрированное и легковесное. Не использующая многопоточность программа, тем не менее, может быть распараллелена по ядрам процессора - к примеру, код в цикле пробегающий по ячейкам памяти, увеличивающий на константу значение ячеек, может быть автоматически раскинут по ядрам процессора в ходе выполнения кода самим процессором.