Вход на сайт
Операционка - однопоточность и многопоточность
640 просмотров
Перейти к просмотру всей ветки
в ответ Murr 21.11.09 11:35
Все. Понял. Согласен. Был неправ.
Поясненая для автора топика. Если она еще читает его. Пример препа
Рассматривается компьютер имеющий два или более ЦПУ.
Допустим что:
- задание выполняется 10 минут (т1).
- вывод одного промежуточного значения на экран 0.01 сек. За минут на вывод будет затрачено 0.01 * 10 = 0.1 сек (т2)
При одном потоке время затраченное на выполнение задания и вывод на экран составит т1 + т2.
При двух потоках время затраченное на выполнения задания и вывод на экран составит время самого медленного потока плюс время на синронизацию данных (т3) - т1 + т3. Что есть "время на синронизацию данных"? Есть область в памяти, которая хранит промежуточные результаты. Когда рабочий поток записывает данные в эту область, а параллельно поток вывода на экран пытается считать эти данные, то один из потоков должен ожидать окончание операции чтения/записи конкурирующим потокм. т3 < т2, т.к. вывод на экран заведомо медленее синхронихации, потому что вовлекает в себя исполнение промежуточного кода (драйвер видеокарты) и осуществляется используя более медленные шины данных. Блокировка памяти осуществляется процессором аппаратно.
Получается
т1 + т2 (один поток) > т1 + т3 (два потока)
и пример преподавателя не является примером, когда ворой поток не увеличивает производительность.
Преподаватель может возражать тем, что
- время на затраченно на вывод пренебрежительно мало в сравнеии с временем выполнения задание. Возражение препу - не важно насколько оно мало, но оно существует и отлично от нуля.
- в условии второго задания нет утверждения, что компьютер во втором случает имеет один ЦПУ. Преп - редкостная редиска.
to
Murr: Спасибо за интересную и конструктивную дискусию.
Поясненая для автора топика. Если она еще читает его. Пример препа
В ответ на:
вы вводите данные, в фоновом режиме идут расчеты, а Вам через каждую минуту выводится окно на экран с промежуточными вычислениями, значения которых Вам не нужны, а нужен лишь конечный результат. Явно от такой многопоточности производительность не повысится.
вы вводите данные, в фоновом режиме идут расчеты, а Вам через каждую минуту выводится окно на экран с промежуточными вычислениями, значения которых Вам не нужны, а нужен лишь конечный результат. Явно от такой многопоточности производительность не повысится.
Рассматривается компьютер имеющий два или более ЦПУ.
Допустим что:
- задание выполняется 10 минут (т1).
- вывод одного промежуточного значения на экран 0.01 сек. За минут на вывод будет затрачено 0.01 * 10 = 0.1 сек (т2)
При одном потоке время затраченное на выполнение задания и вывод на экран составит т1 + т2.
При двух потоках время затраченное на выполнения задания и вывод на экран составит время самого медленного потока плюс время на синронизацию данных (т3) - т1 + т3. Что есть "время на синронизацию данных"? Есть область в памяти, которая хранит промежуточные результаты. Когда рабочий поток записывает данные в эту область, а параллельно поток вывода на экран пытается считать эти данные, то один из потоков должен ожидать окончание операции чтения/записи конкурирующим потокм. т3 < т2, т.к. вывод на экран заведомо медленее синхронихации, потому что вовлекает в себя исполнение промежуточного кода (драйвер видеокарты) и осуществляется используя более медленные шины данных. Блокировка памяти осуществляется процессором аппаратно.
Получается
т1 + т2 (один поток) > т1 + т3 (два потока)
и пример преподавателя не является примером, когда ворой поток не увеличивает производительность.
Преподаватель может возражать тем, что
- время на затраченно на вывод пренебрежительно мало в сравнеии с временем выполнения задание. Возражение препу - не важно насколько оно мало, но оно существует и отлично от нуля.
- в условии второго задания нет утверждения, что компьютер во втором случает имеет один ЦПУ. Преп - редкостная редиска.
to
