Вход на сайт
Операционка - однопоточность и многопоточность
NEW 16.11.09 14:55
в ответ Kabal 16.11.09 14:48
Кабал, вы дурак и тратить время на обьсненя дураку - пустое.
Вы путаете многозадачность с многопоточностью. Можно запустить хоть 100 задачь в один поток и всё будет в шеколаде, но многопоточность от этого не появится.
Если вы непонимаете таких простых вещей, то что вы тогда вобще способны понять?
Вы путаете многозадачность с многопоточностью. Можно запустить хоть 100 задачь в один поток и всё будет в шеколаде, но многопоточность от этого не появится.
Если вы непонимаете таких простых вещей, то что вы тогда вобще способны понять?
NEW 16.11.09 15:02
в ответ Ivan_Pomidoroff 16.11.09 14:55
Иван, Вы только что жиденько обсерились 
Задача - task. Поток - thread. Расскажите нам, дуракам да неучам, как несколько задач запихнуть в один поток
RTFM живет тут: http://en.wikipedia.org/wiki/Computer_multitasking
Во денек, емана...

Задача - task. Поток - thread. Расскажите нам, дуракам да неучам, как несколько задач запихнуть в один поток

RTFM живет тут: http://en.wikipedia.org/wiki/Computer_multitasking
Во денек, емана...
- Живем один раз!
- Нет, мы умираем один раз. А живем мы каждый день.
NEW 16.11.09 15:21
Скорее все же быстрее. Типичное решение для улучшения загрузки процессора (и скорости выполнения задачи) - вынос операций ввода/вывода в отдельные потоки. Если процессор системы и так нагружен до 100% это, конечно, ничего не даст. А так, очень неплохо ускоряет программы, которым приходится что-то читать с диска - обрабатывать - писать на диск, например.
в ответ gendy 16.11.09 14:54
В ответ на:
то что на однопроцессорной системе или без поддержки многопроцессорности многопоточная программа будет работать медленнее чем однопоточная
то что на однопроцессорной системе или без поддержки многопроцессорности многопоточная программа будет работать медленнее чем однопоточная
Скорее все же быстрее. Типичное решение для улучшения загрузки процессора (и скорости выполнения задачи) - вынос операций ввода/вывода в отдельные потоки. Если процессор системы и так нагружен до 100% это, конечно, ничего не даст. А так, очень неплохо ускоряет программы, которым приходится что-то читать с диска - обрабатывать - писать на диск, например.
NEW 16.11.09 15:26
в ответ MrSanders 16.11.09 15:21
Если IO будет - то да, быстрее. А если написать многопоточное вычисление числа Зю с точностью до ХЗ какого знака - то нЭт 
Но сдается мне, что все заинтересованные это и так осознают

Но сдается мне, что все заинтересованные это и так осознают

- Живем один раз!
- Нет, мы умираем один раз. А живем мы каждый день.
NEW 16.11.09 15:47
в ответ Kabal 16.11.09 15:26
Хорошо, а если вот какой пример на то, что от многопоточности производительность программы, приложения или некого интерфэйса не увеличивается. Предположим, в некоей фирме есть база данных, и если директору, бухгалтеру и паре торговых агентов вдруг одновременно приспичит к ней обратиться, причем к одинаковым ресурсам в ней, я думаю у базы данных может наступить клинч, если еще и разработчик не предусмотрел подобного варианта. Такой пример пойдет?
Я продолжаю просматривать ресурсы Интернета на поиск примеров, где многопоточность не увеличивает производительность программы - пока все вода водой, одна теория. Говориться о однопоточном WEB-сервере, для которого многопоточность вообще неприемлема (прошу прощения, если это не так -я только недавно изучаю этот предмет и могу говорить очаровательные глупости) - каков может быть пример подобного однопоточного сервера?
Я продолжаю просматривать ресурсы Интернета на поиск примеров, где многопоточность не увеличивает производительность программы - пока все вода водой, одна теория. Говориться о однопоточном WEB-сервере, для которого многопоточность вообще неприемлема (прошу прощения, если это не так -я только недавно изучаю этот предмет и могу говорить очаровательные глупости) - каков может быть пример подобного однопоточного сервера?
NEW 16.11.09 16:22
в ответ JESSIKA2004 16.11.09 15:47
Не могу себе представить веб-сервер для которого многопоточность неприемлима.
Многопоточность не дает никакого выигрыша только в случае невозможности распараллеливания задачи (а таких задач не так уж и много). Т.е. где в каждом последующем шаге поведение программы целиком зависит от ее предыдущего состояния, а состояние в n-ном шаге заранее предсказать нельзя (а то опять же можно было бы распараллелить).
Вот - копирование файла с оптического носителя :)
Сколькими потоками не читай, быстрее не получится :)
Многопоточность не дает никакого выигрыша только в случае невозможности распараллеливания задачи (а таких задач не так уж и много). Т.е. где в каждом последующем шаге поведение программы целиком зависит от ее предыдущего состояния, а состояние в n-ном шаге заранее предсказать нельзя (а то опять же можно было бы распараллелить).
Вот - копирование файла с оптического носителя :)
Сколькими потоками не читай, быстрее не получится :)
NEW 16.11.09 16:57
в ответ MrSanders 16.11.09 15:21
разделение потоков на медленные быстрые конечно даст полезный эффект. нет смысла забирать время у процессора, если поток сам ждёт внешних данных.
но при быстрых да ещё и ресурсоёмких потоках будет только потеря производительности.
но при быстрых да ещё и ресурсоёмких потоках будет только потеря производительности.
Фашизм будет разбит
Человека карают только те боги, в которых он верит
NEW 16.11.09 17:03
в ответ JESSIKA2004 16.11.09 15:47
как правило в вебсервере один поток ждёт входящих коннектов и как только встречает тут же создаёт новый поток и передаёт ему этого клиента. клиент уходит, поток терминируется.
каждый клиент имеет свой поток на сервере. тут не до производительности, сервёр просто обязан работать с несколькими клиентами одновремённо.
каждый клиент имеет свой поток на сервере. тут не до производительности, сервёр просто обязан работать с несколькими клиентами одновремённо.
Фашизм будет разбит
Человека карают только те боги, в которых он верит
NEW 16.11.09 18:50
в ответ Ivan_Pomidoroff 16.11.09 13:06
В ответ на:
А причём тут операционка?
Ну, как бы при том, что она предоставляет эту возможность.А причём тут операционка?
В ответ на:
Может вопрос надо ставить так: Какие программы поддерживают многопоточность?
Не поддерживают, а используют. Поддерживает (или реализует) ее как раз ОС.Может вопрос надо ставить так: Какие программы поддерживают многопоточность?
В ответ на:
На сколько потоков?
Не очень интересный вопрос, так как цифра запросто может меняться в зависимости от настроек программы или от алгоритма. Что даст тебе эта цифра?На сколько потоков?
В ответ на:
также всякая мишура типо ворда
Просто пустой документ - 11 потоков.также всякая мишура типо ворда
NEW 16.11.09 19:16
Об операционке и речи нет так как она итак всё поддерживает и не является узким местом. Тут важно само наличи в железе (процессор) и в программе (исполняющей код) а со средой и так всё в порядке.
Я вас удевлю, но есть программы которые неподдерживают многопоточность и то что вы думаете о многопоточности (на примере пустого документа) это ваша фантазия неправельно поняла суть вопроса и терминов.
Пожалуйсто, попробуйте настроить... щяс весь мир бьётся над тем как оптемизировать хотябы тежи игры под большее число потоков, а у вас уже всё просто... ворд на 11 потоков.
Насколько я знаю загрузить худо бедно 4 ядра смогла только GTA4... Да и разбиение на 2 потока ещё не полностью освоено в игровой сфере, а там за каждый мегагерц - борьба.
Ладно с играми. Топовые графические программы не всегда могут распаралелить потоки и в итоге подгатовка к обработки геометрии идёт в один поток на одном ядре из ... любого чесла ядер. А вы тут про 11 потоков в ворде... нафиг оно там надо.
Откуда вы это берёте? Вы вобще вкурсе о чём речь?
в ответ NightWatch 16.11.09 18:50
В ответ на:
Ну, как бы при том, что она предоставляет эту возможность.
Ну, как бы при том, что она предоставляет эту возможность.
Об операционке и речи нет так как она итак всё поддерживает и не является узким местом. Тут важно само наличи в железе (процессор) и в программе (исполняющей код) а со средой и так всё в порядке.
В ответ на:
Не поддерживают, а используют. Поддерживает (или реализует) ее как раз ОС.
Не поддерживают, а используют. Поддерживает (или реализует) ее как раз ОС.
Я вас удевлю, но есть программы которые неподдерживают многопоточность и то что вы думаете о многопоточности (на примере пустого документа) это ваша фантазия неправельно поняла суть вопроса и терминов.
В ответ на:
Не очень интересный вопрос, так как цифра запросто может меняться в зависимости от настроек программы или от алгоритма. Что даст тебе эта цифра?
Не очень интересный вопрос, так как цифра запросто может меняться в зависимости от настроек программы или от алгоритма. Что даст тебе эта цифра?
Пожалуйсто, попробуйте настроить... щяс весь мир бьётся над тем как оптемизировать хотябы тежи игры под большее число потоков, а у вас уже всё просто... ворд на 11 потоков.
Насколько я знаю загрузить худо бедно 4 ядра смогла только GTA4... Да и разбиение на 2 потока ещё не полностью освоено в игровой сфере, а там за каждый мегагерц - борьба.
Ладно с играми. Топовые графические программы не всегда могут распаралелить потоки и в итоге подгатовка к обработки геометрии идёт в один поток на одном ядре из ... любого чесла ядер. А вы тут про 11 потоков в ворде... нафиг оно там надо.
В ответ на:
Просто пустой документ - 11 потоков.
Просто пустой документ - 11 потоков.
Откуда вы это берёте? Вы вобще вкурсе о чём речь?
NEW 16.11.09 19:54
В ответ на:
то что вы думаете о многопоточности (на примере пустого документа) это ваша фантазия неправельно поняла суть вопроса и терминов
Тады ой. Тут уже тебе ссылку на многозадачность давали. Я тогда на многопоточность кину. ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0... Да ты там уже побывал, я смотрю. Но не все прочитал, не все понял. то что вы думаете о многопоточности (на примере пустого документа) это ваша фантазия неправельно поняла суть вопроса и терминов
В ответ на:
Многопоточность (как доктрину программирования) не следует путать ни с многозадачностью, ни с многопроцессорностью, несмотря на то, что операционные системы, реализующие многозадачность, как правило реализуют и многопоточность.
Многопоточность (как доктрину программирования) не следует путать ни с многозадачностью, ни с многопроцессорностью, несмотря на то, что операционные системы, реализующие многозадачность, как правило реализуют и многопоточность.
В ответ на:
Откуда вы это берёте? Вы вобще вкурсе о чём речь?
Если бы ты был в курсе, ты бы знал, откуда я это беру.Откуда вы это берёте? Вы вобще вкурсе о чём речь?
NEW 16.11.09 20:54
Ну так обьесните, или вас нехватает на более чем кинуть ссылку?
Прежде чем советывать понимания, потрудитесь сами хоть немного им попользоваться. Надеюсь оно не исчерпалось поиском ссылки... хотя вставка цитат могла утомить... понимаю.
типо "сам такой"?...
...аргументы исчерпались так и неначавшись (
в ответ NightWatch 16.11.09 19:54
В ответ на:
Но не все прочитал, не все понял.
Но не все прочитал, не все понял.
Ну так обьесните, или вас нехватает на более чем кинуть ссылку?
Прежде чем советывать понимания, потрудитесь сами хоть немного им попользоваться. Надеюсь оно не исчерпалось поиском ссылки... хотя вставка цитат могла утомить... понимаю.
В ответ на:
Если бы ты был в курсе, ты бы знал, откуда я это беру.
Если бы ты был в курсе, ты бы знал, откуда я это беру.
типо "сам такой"?...
...аргументы исчерпались так и неначавшись (
NEW 17.11.09 03:36
Хи-хи. Согласно твоей логике, три потока в программе следует делать, когда есть три ядра, а четыре, когда четыре и дальше по аналогии. -))))
Вабще-та, многопоточность имеет смысл всегда, когда нужны легковесные процессы. Хороший пример - высокопроизводительный сервер, где становятся критичными затраты на порождение процессов, обрабатывающие запросы клиентов. По грубым прикидкам, которые любят указывать в литературе, в среде UNIX затрачиваемое время на создание процесса примерно в 100 раз больше, чем на создание потока.
Потоки к ядрам отношения не имеют.
Нет, не пойдёт. Многопоточность и обеспечение целостности БД это как тёплое и мягкое. Первое - инструмент для программиста, второе - цель, которая обеспечивается рядом мер. Биты, байты, вольты и амперы - примерно также нужны для обеспечения целостности БД. Т.е. утверждать, что совсем без них оно всё обходится - не совсем верно, а сказать, что они используются - можно, но бессмысленно. -)
Придумайте сами абсолютно любое действие, выполнение которого не параллелится по потокам и вы приведёте абсолютно корректный пример, где многопоточность ОС не даст никакого выигрыша. Возьмите быструю сортировку массива - действие потенциально отлично распараллеливающееся. Напишите на С фунцкию сортировки, откомпилируйте gcc и вы получите код, которому до лампочки способность ОС создавать потоки.
Короче, абсолютно всё, что написано обычным образом без использования потоков и без использования специальных средств автоматически распараллеливающих однопоточный код по потокам (как пример: Data Parallel Haskell - расширение компилятора языка Haskell, "Glasgow Haskell Compiler", которое параллелит "обычный" код) не получит выигрыша от способности ОС создавать потоки.
Так он же тебе объяснил. У тебя перемешались в одну кучу потоки, параллелизм и многозадачность.
Программы не поддерживают многопоточность, они её могут использовать, а могут и не использовать, как пожелает писавший их программист. Поток это такое средство в ос, типа процесса, только кастрированное и легковесное. Не использующая многопоточность программа, тем не менее, может быть распараллелена по ядрам процессора - к примеру, код в цикле пробегающий по ячейкам памяти, увеличивающий на константу значение ячеек, может быть автоматически раскинут по ядрам процессора в ходе выполнения кода самим процессором.
В ответ на:
многопоточность имеет смысл только на многопроцессорных системах с раздачей потоков по процессорам, если это поддерживается операционкой
многопоточность имеет смысл только на многопроцессорных системах с раздачей потоков по процессорам, если это поддерживается операционкой
Хи-хи. Согласно твоей логике, три потока в программе следует делать, когда есть три ядра, а четыре, когда четыре и дальше по аналогии. -))))
Вабще-та, многопоточность имеет смысл всегда, когда нужны легковесные процессы. Хороший пример - высокопроизводительный сервер, где становятся критичными затраты на порождение процессов, обрабатывающие запросы клиентов. По грубым прикидкам, которые любят указывать в литературе, в среде UNIX затрачиваемое время на создание процесса примерно в 100 раз больше, чем на создание потока.
В ответ на:
Понятия не имею каким образом. На двух ядрах быстрее кодируется, чем на одном.
Понятия не имею каким образом. На двух ядрах быстрее кодируется, чем на одном.
Потоки к ядрам отношения не имеют.
В ответ на:
Хорошо, а если вот какой пример на то, что от многопоточности производительность программы, приложения или некого интерфэйса не увеличивается. Предположим, в некоей фирме есть база данных, и если директору, бухгалтеру и паре торговых агентов вдруг одновременно приспичит к ней обратиться, причем к одинаковым ресурсам в ней, я думаю у базы данных может наступить клинч, если еще и разработчик не предусмотрел подобного варианта. Такой пример пойдет?
Хорошо, а если вот какой пример на то, что от многопоточности производительность программы, приложения или некого интерфэйса не увеличивается. Предположим, в некоей фирме есть база данных, и если директору, бухгалтеру и паре торговых агентов вдруг одновременно приспичит к ней обратиться, причем к одинаковым ресурсам в ней, я думаю у базы данных может наступить клинч, если еще и разработчик не предусмотрел подобного варианта. Такой пример пойдет?
Нет, не пойдёт. Многопоточность и обеспечение целостности БД это как тёплое и мягкое. Первое - инструмент для программиста, второе - цель, которая обеспечивается рядом мер. Биты, байты, вольты и амперы - примерно также нужны для обеспечения целостности БД. Т.е. утверждать, что совсем без них оно всё обходится - не совсем верно, а сказать, что они используются - можно, но бессмысленно. -)
В ответ на:
Я продолжаю просматривать ресурсы Интернета на поиск примеров, где многопоточность не увеличивает производительность программы - пока все вода водой, одна теория.
Я продолжаю просматривать ресурсы Интернета на поиск примеров, где многопоточность не увеличивает производительность программы - пока все вода водой, одна теория.
Придумайте сами абсолютно любое действие, выполнение которого не параллелится по потокам и вы приведёте абсолютно корректный пример, где многопоточность ОС не даст никакого выигрыша. Возьмите быструю сортировку массива - действие потенциально отлично распараллеливающееся. Напишите на С фунцкию сортировки, откомпилируйте gcc и вы получите код, которому до лампочки способность ОС создавать потоки.
Короче, абсолютно всё, что написано обычным образом без использования потоков и без использования специальных средств автоматически распараллеливающих однопоточный код по потокам (как пример: Data Parallel Haskell - расширение компилятора языка Haskell, "Glasgow Haskell Compiler", которое параллелит "обычный" код) не получит выигрыша от способности ОС создавать потоки.
В ответ на:
Ну так обьесните, или вас нехватает на более чем кинуть ссылку?
Ну так обьесните, или вас нехватает на более чем кинуть ссылку?
Так он же тебе объяснил. У тебя перемешались в одну кучу потоки, параллелизм и многозадачность.
Программы не поддерживают многопоточность, они её могут использовать, а могут и не использовать, как пожелает писавший их программист. Поток это такое средство в ос, типа процесса, только кастрированное и легковесное. Не использующая многопоточность программа, тем не менее, может быть распараллелена по ядрам процессора - к примеру, код в цикле пробегающий по ячейкам памяти, увеличивающий на константу значение ячеек, может быть автоматически раскинут по ядрам процессора в ходе выполнения кода самим процессором.
17.11.09 05:34
в ответ gendy 16.11.09 13:52
многопоточность имеет смысл только на многопроцессорных системах
в совсем примитивном случае процесс часто ждёт внешних сигналов
-----
Вообще-то, многопоточность вводится тогда, когда надо управлять
процессами обработки. Ожидание внешних сигналов и наличие многих
процессоров - частности. Ибо в больших майнфреймах по одному
процессору и как правило от 4-х до 16-ти задач/процессов/потоков
одновременно...
но сама система в этом случае будет ещё медленнее работать
-----
На том же майнфрейме переключение контекста задачи выполняется
одной командой... так что переключение практически не чувствуется.
в совсем примитивном случае процесс часто ждёт внешних сигналов
-----
Вообще-то, многопоточность вводится тогда, когда надо управлять
процессами обработки. Ожидание внешних сигналов и наличие многих
процессоров - частности. Ибо в больших майнфреймах по одному
процессору и как правило от 4-х до 16-ти задач/процессов/потоков
одновременно...
но сама система в этом случае будет ещё медленнее работать
-----
На том же майнфрейме переключение контекста задачи выполняется
одной командой... так что переключение практически не чувствуется.