![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Dennnis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
Запускаются они по очереди но работают одновременно.
Запуск потока занимает доли % от продолжительности его работы. Запустить несколько потоков одновременно можно только в том случае если они запускаются разными потоками созданными до этого. --------------------
Get Rich or Die Tryin' |
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
Если я не ошибаюсь, то в последнем варианте кода
дело обстоит так: поток1 создался->просчитался эл-т матрици (или эллементы) -> поток1 запустился потом следующий поток2 создался->просчитался эл-т матрици (или эллементы) -> поток2 запустился а надо поток1 создался-> просчитался эл-т матрици (или эллементы) потом следующий поток2 создался->просчитался эл-т матрици (или эллементы) а уже потом поток1 зпустился (Start) поток1 зпустился (Start) т.е. типа "Все потоки, айда запускайтесь" Это сообщение отредактировал(а) Ronin08 - 31.3.2008, 20:44 --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Ronin08, если я правильно понял, то Вы ошибаетесь. Содержимое Potok начинает выполняться в момент вызова метода Start для соответствующего потока. Можете считать, что потоки начинают работать почти одновременно, поскольку никакие два события не могут физически одновременно произойти на последовательной аппаратуре. Разъясню ещё один момент : после вызова Start для одного из потоков, в основном потоке происходит немедленный (асинхронный) возврат. То есть, основной поток не ожидает, пока вспомогательный получит какой-либо результат в методе Potok, а спокойно себе идёт дальше по программе, то есть, последовательно вызывает метод Start для всех потоков. Это сообщение отредактировал(а) marcusmae - 31.3.2008, 21:31 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
marcusmae, все это понятно, что одновременно не может быть, что все процессы выполняются квазипараллельно и т.д.
Но давайте представим ситуацию, что нам надо перемножить матрицы 500*500 и при этом все вычисления надо разбить на 300 потоков, где гарантия, что все потоки будут задействованы! --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Все ли будут задействованы - зависит от алгоритма. В текущем варианте, на сколько я могу видеть, некратный остаток от деления нагрузки на потоки вообще не учитывается. Кроме того, имеется ошибка, связанная с тем, что в цикле маркеры начала и конца - begin и end - не модифицируются. Рекомендую для начала прогнать многопоточный алгоритм, как он есть, в одном потоке (вместо t.Start вызывать Potok c соотв. аргументами). Ранее чем будут получены правильные результаты, говорить наверно не о чем, да?.. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Dennnis |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
Остаток от деления нагрузки на потоки выполняется последним созданным потоком.
Прогонял - всё сходится (RND заменял на i + j --------------------
Get Rich or Die Tryin' |
||||
|
|||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
А зачем? Уж не знаю, как проверяли... Вот здесь :
разве правильно, что end меняется единственный раз в таком цикле (не говоря уж о begin)? Или я чего-то недопонимаю? Добавлено через 1 минуту и 53 секунды
Понял, вижу. -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| Dennnis |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
Нет не правильно. Вот как правильно:
Проверил с исправлениями, все нормально. Исходник по которому считал в пр. файле. Присоединённый файл ( Кол-во скачиваний: 5 )
Program.cs 7,28 Kb--------------------
Get Rich or Die Tryin' |
||||
|
|||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
на сколько я знаю в С++ есть такое свойство suspend;
Например, xxx = create Thread(...,suspend); это говорит о том, что после создания потоков, они "подвешиваются" а потом можно просто в цикле запускать star; О такой одновременности я говорил, так как на сомо создание потоков тратится много ресурсов; Это сообщение отредактировал(а) Ronin08 - 1.4.2008, 20:34 --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
C++ - это язык, и у него нет свойств. Вероятно, речь о каком-то пакете, поддерживающем многопоточность? = Например, WINAPI или POSIX pThreads или boost::thread. Во всех трёх возможность Suspend присутствует в том или ином виде. Присутствует и в .NET - Thread.Suspend metod. Следующий тезис неверен : При "создании" потока (new Thread(...)) ничего особенного не происходит, вся вычислительная сложность находится в методе Potok, который запустится только после вызова thread.Start(...). Боюсь, сейчас Вы у себя делаете какие-то неверные выводы. Может, стоит увеличить теоретические познания?.. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
Можно было догадаться, что я описался я имел в виду у метода create Thread() --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |