|
0 / 0 / 0
Регистрация: 15.12.2014
Сообщений: 32
|
||||||
Где в данной программе параллельность и асинхронность потоков происходит?17.12.2014, 22:27. Показов 3425. Ответов 9
Метки нет (Все метки)
Уважаемые специалисты, прошу помощи в небольшом разъяснении, срочно нужен ответ на вопрос, где в данной программе параллельность и асинхронность потоков происходит? помогите пожалуйста, пробывал гуглить , всё равно немогу вникнуть, может вы объясните понятнее, заранее спасибо огромное
0
|
||||||
| 17.12.2014, 22:27 | |
|
Ответы с готовыми решениями:
9
Не могу понять, что происходит в данной программе Параллельность потоков Где ошибка в данной программе? |
|
6 / 6 / 1
Регистрация: 19.07.2013
Сообщений: 54
|
|
| 17.12.2014, 22:36 | |
|
Параллельность в том, что они делают одни и те же действия, а асинхронность в том, что они физически не могут выполнить свою работу в 1 и тот же момент.(Sleep ведёт себя по разному к тому же)
Хотя, наверно это только моё мнение =(
1
|
|
|
168 / 107 / 30
Регистрация: 19.01.2013
Сообщений: 849
|
||||||||||||
| 17.12.2014, 22:40 | ||||||||||||
Параллельность заключается в том, что в процессоре специализируется сразу две задачи, одновременно или параллельно, что-ли. Программа распараллеливание свои вычисления. Асинхронность заключается в независимости потоков. Они не конкурируют за ресурсы и не зависимы друг от друга, т.е. от вычисления одного потока не зависят от вычислений другого. Чтобы понять лучше прочтите ниже по синхронизацию потоков. Однако, так нельзя делать. Надо всё же блокировать ресурс, чтобы не получалась галиматья. В вашем коде это не очевидно, потому, как вы используете в разных потоках разные ресурсы. У вас возникнет проблема, если вы будете в двух потоках вызывать один метод. Например в обоих функцию Min или Max. Для решения этой задачи используется блокировка данных. http://msdn.microsoft.com/ru-r... 73179.aspx С ключевым словом
1
|
||||||||||||
|
0 / 0 / 0
Регистрация: 15.12.2014
Сообщений: 32
|
||
| 17.12.2014, 22:46 [ТС] | ||
|
А одни и те же действия это получается какие?
Добавлено через 3 минуты
0
|
||
|
168 / 107 / 30
Регистрация: 19.01.2013
Сообщений: 849
|
||
| 17.12.2014, 22:49 | ||
|
Добавлено через 57 секунд Не по теме: Исправленное прочтите Добавлено через 23 секунды Не по теме: Понятно? Если да, то напишите. Жду.
1
|
||
|
6 / 6 / 1
Регистрация: 19.07.2013
Сообщений: 54
|
|
| 17.12.2014, 22:49 | |
|
Тела потоков схожи,
AArray.Min AArray.Max Очевидно имеют очень сходную реализацию Console.WriteLine Разные тексты, создание нового значения в таблице строк, из за динамичности массива.
1
|
|
|
0 / 0 / 0
Регистрация: 15.12.2014
Сообщений: 32
|
|
| 17.12.2014, 22:54 [ТС] | |
|
Ну не особо, мне бы вот именно на примере, когда начинает работать эта асинхронность, когда параллельность, как я понял, асинхронность это то что каждый поток будет иметь в итоге свое значение, и эти значения в программе никак не пересекаются и не зависят друг от друга, а параллельность это то что выполняется 2 метода, но вот как они выполняются, вот это немножко не понимаю, одновременно ли они запускаются? и вообще как эта параллельность идет
0
|
|
|
168 / 107 / 30
Регистрация: 19.01.2013
Сообщений: 849
|
|
| 17.12.2014, 23:23 | |
|
Есть процессор. В нем создаются задачи с командами. Когда вы создаёте 2 потока, вы ставите процессору 2 задачи. НО ВЫ знаете, что процессор не в состоянии выполнять сразу две задачи одновременно. Современные процессоры отводят отпределённый промежуток времени для каждного из процессов.(важно) Кому-то больше( процессам, связанным с активным окном, или системным, к примеру), а кому-то меньше.( но это не суть здесь.)
В рамках конкретной программы супервизор задач скажем отвёл ей 200 мллисекунд.(или чуть больше, чтобы помимо потоков успел отработать и другой код(не суть)). Вот первые 20 миллисекунд занял поток 1, но у вас по есть команда слипа. Короче вы отправили его спать. НО КАК ТОЛЬКО ОТКРЫЛСЯ ПОТОК, ПРОГРАММА ПРОДОЛЖАЕТ ИДТИ ДАЛЬШЕ. ОНА НАТЫКАЕТСЯ НА 2-ОЙ ПОТОК, И ТОЖЕ ОТКРЫВАЕТ ЕГО! Заработал поток 2, ему тоже дали 20 миллисекунд. Он видит, что поток 1 спит. Он может исполниться. Но вы его тоже отправляете спать. В это время поток 1 возвращается и начинает работать. Вы получаете ответ. Вы видите первый ответ по минимум. После возвращается( после сна), поток 2. И тоже отрабатывает. Вы видите МАКсимальное значение. Для лучшего понимания заремируйте слип у второго потока. Вы увидите, что в начале выводится МАКСИМАЛЬНОЕ значение, а потом МИНИМАЛЬНОЕ! Добавлено через 1 минуту Блин по 20 миллисекунд забудьте. В данном случае поток исполняется сразу весь за данный ему промежуток времени, Добавлено через 1 минуту Не по теме: да может не совсем хорошо, но по другому не смогу наверное- долго)))) Добавлено через 7 минут Не по теме: Вам всё понятно? Задайте вопрос!
1
|
|
|
0 / 0 / 0
Регистрация: 15.12.2014
Сообщений: 32
|
|
| 17.12.2014, 23:41 [ТС] | |
|
Спасибо, это получается и есть асинхронность да? то что во время выполнение одного из потоков, второй спит, как только один заканчивает свое выполнение, выполнение переходит ко второму, правильно?)
0
|
|
|
168 / 107 / 30
Регистрация: 19.01.2013
Сообщений: 849
|
|
| 18.12.2014, 00:32 | |
|
Вообще не самый лучший пример потоков. По сути они тут и не нужны.
Вот хороший пример! http://habrahabr.ru/post/126495/ Вы правы, только он не спит, он стоит в очереди на выполнение, в режиме "готов к выполнению". В силу того, что процессор способен выполнять только одну задачу, вторая задача стоит в очереди.[в вашем примере перед тем как встать в эту очередь поток спит] НО в вашем примере много оговорок. 1) 2 процесса всегда конкурируют,( возвращаемся к 20 миллисекундам). если вы вдруг начнёте выводить разные массивы в двух потоках, и без всяких слипов, то вы получите промерно вот, что: "лтло12321орарлмл3124143", ну вы поняли. Кстати на хабре ровно такая же белиберда получается. Это и проявление конкуренции. Именно в этом примере видно, поток не успевает закончить свои действия за отведённое ему супервизером задач время. Он выкидывается из процессора. НО он не спит. Он ждёт! Он стоит в очереди на выполнение.(например он выводил буквы, но не успел вывести весь массив). Второй поток начал работать, НО он тоже ждал, не спал!(тоже не успел вывести все цифры за определённое время). Его выкинуло из процессора. И так будет, пока один из них не отработает до конца. Вы увидите белиберду, но вы увидите конкуренцию за ресурсы. У вас. Один поток загрузился в процессор, и всё. Он спит.В добавок и 2-ой так же делает. Нет конкуренции за ресурсы(это происходит и по второй причине). Хочется спросить 2-ой поток:"Зачем ты вообще загружаешься тогда как поток, если всё равно спать будешь? Всё равно будешь "ждать"(но на самом деле спать), пока первый выполниться". 2)Повторюсь, тут вообще не видна само асинхронное выполнение. Тут у каждого процесса по одному действию. Не возможно визуально отследить и понять весь смысл работы потоков. Тут одно действие. Я вообще не понимаю, зачем тут потоки, если вызвав функции вы всё равно тот же эффект получите! Конкретно в данном случае. В общем. Посмотрите пример хабра, там более понятно. Вы увидите, что там есть конкуренция за ресурсы. А именно за метод myThread. Вы поймёте, что иногда требуется использовать синхронизацию, чтобы избежать такой галиматьи на выводе и т.д.( ну правда пример на хабре не исправишь просто вставкой лука, уже пробовал. )
1
|
|
| 18.12.2014, 00:32 | |
|
Помогаю со студенческими работами здесь
10
Где точка входа в данной программе? Для чего в этой программе асинхронность?
Когда происходит планирование потоков? Почему происходит взаимная блокировка потоков? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|