Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614

Многопоточность - панацея или криворукость monkey coder-ов из больших корпораций

01.10.2015, 15:44. Показов 3712. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос прост:
Зачем к примеру скайпу в режиме ожидания 90 потоков?
И зачем 60 потоков FireFox с одной открытой вкладкой?
Или аж 31 поток ЛАУНЧЕРУ World of Warships при ожидании нажатия кнопки старт?
Или 70 потоков рабочему столу?
Или 30 потоков закрытому Microsoft.Photos?
Или 19 потоков калькулятору. Там кнопок меньше чем потоков. Что в нем то параллелить?
И все это хозяйство на 4 ядра. Вопрос зачем? Чтобы таск свитчинг тормозил? Ведь 99% того на что вешают потоки еще лучше будет работать в псевдопараллельном режиме. Но это как понимаю мозгами шурупать надо над иерархиями и тп а не накатать кучу кривого кода в мертвом цикле и сунуть в поток.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2015, 15:44
Ответы с готовыми решениями:

Зло корпораций или горе фреймворки
На моей первой работе, компания использовала собственный фрйемворк, на второй небольшое подобие, это было скорее похоже на примитивный...

Карты Карно - панацея или нет?..
Собственно, вопрос. Вот есть такой всем известный метод Карно, который позволяет наглядно, можно сказать графически, выявить зависимости в...

Многопоточность в передачи больших файлов
Здравствуйте, нужна помощь в многопоточности передачи данных. Проект подобия облака. Клиент отслеживает папку N, как только вней появляются...

58
39 / 39 / 11
Регистрация: 05.09.2015
Сообщений: 262
02.10.2015, 00:30
Студворк — интернет-сервис помощи студентам
У меня у Калькулятора 3 потока. Нажать "равно" - становится 4.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.10.2015, 00:37  [ТС]
А у меня если "=" нажать становится 24 и так и остается. Во блин у майкрософта математика, Оказывается чтобы 2+2 сложить 5 потоков надо.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
02.10.2015, 07:39
Fulcrum_013
Канализационная труба самого большого диаметра стыкуется с унитазом, а не с раковиной на кухне, хотя именно через раковину на кухне уходит больше всего воды.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.10.2015, 08:42  [ТС]
Цитата Сообщение от mporro Посмотреть сообщение
Канализационная труба самого большого диаметра стыкуется с унитазом, а не с раковиной на кухне, хотя именно через раковину на кухне уходит больше всего воды.
Только характер потока разный. Как объем в секунду так и содержимое. А время разное. Соответственно у раковины с мгновенной пропускной способностью в разв меньшим чем у унитаза интеграл пропущенного объема в разы больше, т.к. и время ненулевого значения функции расхода в разы больше.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.10.2015, 08:51
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вот это и называется криворукость. Загибается/зацикливается/виснет исключительно от криворукости. Хотя оно понятно. Контингент там такой.
Пример: в одном из плагинов для браузера (который написан сторонним разработчиком)
происходит AV и весь браузер со всеми вкладками загибается, включая твое незаконченное
письмо на пару страниц и закачку файла. Какая реакция ? Правильно, мат. Вот почему
современные браузеры, как правило, используют стратегию "одна вкладка - один процесс",
да еще используют выделенные процессы-контейнеры для плагинов и обработки веб-контента.

И на счет контингента ты сильно не прав.
Исходники Google Chrome видел ? Если нет - советую скачать и поизучать, это во многих
отношениях образцовый проект и абы кого туда просто не пускают.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
02.10.2015, 09:06
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Сколько там строк не считал
Посчитай.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
но печатной доки по этому коду 2 комнаты.
И? Это ни разу не показатель.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.10.2015, 11:54  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
происходит AV и весь браузер со всеми вкладками загибается, включая твое незаконченное
письмо на пару страниц и закачку файла. Какая реакция ? Правильно, мат.
COM, ActiveX, OLE, и вообще отношения с плагинами по принцнипу клиент-сервер - Все позволяет чтобы Exception и мертвый цикл там в нетрях плагина и остались. Ну ладно еще по потоку на активный экземпляр плагина, ну или процессу, чтобы не лазили в памяти куда им не положено (хотя если сильно захотят то полезут). Но зачем же по процессу на вкладку и такое количество потоков держать? Наксолько понимаю сидят все эти потоки и ждут чего то. И точно не загрузки новой страницы, поскольку при загрузке стартует еще пачка потоков и по завершению загрузки закрываются.

Добавлено через 56 минут
Цитата Сообщение от Убежденный Посмотреть сообщение
происходит AV и весь браузер со всеми вкладками загибается, включая твое незаконченное
письмо на пару страниц и закачку файла. Какая реакция ?
Главное чтобы плагин не покрешил данные в куче. Но чтобы этого не произошло ему вообще нельзя никакого доступа к данным давать. В принципе. А то покрешит если захочет. И вообще его запускать нельзя. Хоть в каком процессе. А то приатачится как дебаггер и будет рыться и в куче и в стеке и в коде. А Exception за пределы плагина не выпускаются и в одном (вообще одном) потоке. Dead loop конечно лечится только сторожевым потоком.

Добавлено через 1 час 4 минуты
Цитата Сообщение от korvin_ Посмотреть сообщение
Посчитай.
А зачем? Когда будет циферь "ну его нафик" то это будет половина. Кстати самих сырцов там в наличии мало чего есть. в основном правят машкод если чего вдруг приделать надумали. Бывает кучу руками подправляют в реалтайме, когда датчик загнулся а слябы в клеть пропихивать надо.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
02.10.2015, 21:16
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А зачем?
Понятно. Так я и думал.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Когда будет циферь "ну его нафик" то это будет половина.
Угу-угу. Без "циферь" это пустая болтовня.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
в основном правят машкод если чего вдруг приделать надумали. Бывает кучу руками подправляют в реалтайме
Понятно. Значит алгоритм крайне примитивен. Так я и думал.
0
02.10.2015, 22:11

Не по теме:

Цитата Сообщение от korvin_ Посмотреть сообщение
Значит алгоритм крайне примитивен
Кликните здесь для просмотра всего текста
Две недели писать на крестах примитивный шутер за $100 и потом бравировать этим. Не алгоритм, автор примитивен до неприличия.

0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
03.10.2015, 08:23
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ведь 99% того на что вешают потоки еще лучше будет работать в псевдопараллельном режиме. Но это как понимаю мозгами шурупать надо над иерархиями и тп а не накатать кучу кривого кода в мертвом цикле и сунуть в поток.
Угу, "мозгами шурупать". Приведу шуточную аналогию.
У вас стоит задача срочно дописать проект на вашем Билдере. И в то же время приготовить яичницу себе и детям. (Жена в это время смотрит сериал).
1. Подход "шурупующего мозгами" Борланд-профессионала: Пишем вспомогательную программу, чтобы через каждые полторы минуты подавала звуковой сигнал. Бежим на кухню, проверяем состояние яичницы и дальше - за работу.
2. Подход "monkey coder-ов" : Просим жену приготовить яичницу.

Добавлено через 14 минут
PS. Тенденция - создавать на каждый чих новый поток или запускать процесс - ИМХО, вполне оправдана и перспективна. Процессоры уже почти уперлись в потолок тактовой частоты, и основной источник повышения производительность - распараллеливание. А основная проблема - распараллелить можно далеко не любую задачу.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.10.2015, 10:39  [ТС]
Цитата Сообщение от gng Посмотреть сообщение
PS. Тенденция - создавать на каждый чих новый поток или запускать процесс - ИМХО, вполне оправдана и перспективна. Процессоры уже почти уперлись в потолок тактовой частоты, и основной источник повышения производительность - распараллеливание. А основная проблема - распараллелить можно далеко не любую задачу.
Скажем так - она может быть оправдана только если количество потоков не больше чем количество конвейеров и при этом обспечено разделение доступа к ресурсам по ресурсам а не по времени доступа. Иначе имеем не более чем оверхединг по таск свитчингу и распределению доступа к ресурсам. Оно понятно что к примеру на CUDA c 4000 конвейеров и два массива суммировать можно запуская по отдельному потоку на каждый элемент. Но на Intel в этом плане будет более производительно суммирование в одном потоке с использованием AVX инструкций, даже при том что доступ к ресурсам распределяется по ресурсам в данном случае.

Добавлено через 4 минуты
Не будем забывать что каждый поток это не только точка исполнения и набор значений регистров но еще и стек. Соответсвенно при каждом переключении происходит очистка кеша процессора.

Добавлено через 3 минуты
Цитата Сообщение от korvin_ Посмотреть сообщение
Понятно. Значит алгоритм крайне примитивен. Так я и думал.
Там стати событийное управление процессом упахано. Оно дейсвтительно в результате получается проще удобнее и понятнее цикломатического.

Добавлено через 11 минут
Цитата Сообщение от gng Посмотреть сообщение
Угу, "мозгами шурупать". Приведу шуточную аналогию.
У вас стоит задача срочно дописать проект на вашем Билдере. И в то же время приготовить яичницу себе и детям. (Жена в это время смотрит сериал).
1. Подход "шурупующего мозгами" Борланд-профессионала: Пишем вспомогательную программу, чтобы через каждые полторы минуты подавала звуковой сигнал. Бежим на кухню, проверяем состояние яичницы и дальше - за работу.
1. Подход "monkey coder-ов" : Просим жену приготовить яичницу.
Подход "monkey coder-ов":
Программируем жене функцию опроса не хочет ли кто либо яичницу. Если хочет то идет и готовит. Поскольку потребителей несколько а опрос нескольких потребителей для Monkey Сodera задача непосильная то заводится по жене не каждого потребителя. В результате получается очередь жен к сковородке. Если кроме пожарить яишницу добавить еще и поджарить колбаску, то количество потребных жен тут же удваивается, а количество сковородок Const
2. Подход профи: каждому потребителю приделывем возможность запроса что ему хочется, А жене функцию группировки по совместимости и сковородкам. В результате одна жена справляется.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.10.2015, 11:16
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
она может быть оправдана только если количество потоков не больше чем количество конвейеров
Бред. Одна из необходимости построения потоков в нынешних программных моделях графических интерфейсов - это борьба с фризами при работе с медленными устройствами (файл, сеть и т.п.). Создаётся отдельный поток, который поработает с медленным устройством, а потом данные отдаются основному потоку управления графическим интерфейсом. В итоге мы имеем то, что у нас есть два потока, причём каждый из них практически не грузит конвейер (главный поток спит в цикле ожидания событий, воспомогательный поток спит, ожидая, пока придут данные от медленного устройства)
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.10.2015, 11:58  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Бред. Одна из необходимости построения потоков в нынешних программных моделях графических интерфейсов - это борьба с фризами при работе с медленными устройствами (файл, сеть и т.п.). Создаётся отдельный поток, который поработает с медленным устройством, а потом данные отдаются основному потоку управления графическим интерфейсом. В итоге мы имеем то, что у нас есть два потока, причём каждый из них практически не грузит конвейер (главный поток спит в цикле ожидания событий, воспомогательный поток спит, ожидая, пока придут данные от медленного устройства)
БРЕД. Сколько не вешай потоков на опрос выход мультиплексора вход у него только один, получится только оверхединг по опросу. Этим операционка должна заниматься. И она это это очень даже успешно делает (к примеру асинхронные операции в WinAPI). И принцип здесь - один поток на устройство. По прерыванию от устройства драйвер пишет данные с разбором по буферам, запрошенным приложениями. Когда буфер готов - маячит приложению.

Добавлено через 29 минут
Ладно б еще 2 потока. А то как понимаю поток на каждый пук типа загрузки или сохранения файла. причина в том что во первых не умеют пользовать асинхронные операции операционки, и вторая проблема - не въезжают что любой енкодер и декодер протокола/формата - автомат состояний как его не крути, поэтому не умеют принимать/писать файл в буфера по частям. Отсюда вместо асинхронных операций поток на каждый файл/сетевой запрос. Ладно бы еще только это. Но вопрос немного в другом - зачем стандартному виндовому калькулятору который что то читает только на запуске, постоянно держать 19 потоков а при нажатии кнопки "=" при сложении 2+2 запускать еще 5 потоков?
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
03.10.2015, 14:20
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Того 32k строк кода для того чтобы подергать 4 шаговиками насколько понимаю по передаваемым им точкам. Не густовато ли?
Чего удивляться-то, сишечка ж

Добавлено через 11 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
не накатать кучу кривого кода в мертвом цикле
Лол, ты так себе работу тред-пулов представляешь, да?

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Весь мои helloworld'ы однопоточные.
Поправил тебя
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.10.2015, 15:12  [ТС]
Цитата Сообщение от Voivoid Посмотреть сообщение
Чего удивляться-то, сишечка ж
Я так понимаю там во втором случае 32k строк кода вместе с осью, при этом 95% возможностей этой оси к задаче управления станком никакого отношения не имеют.

Добавлено через 38 минут
Цитата Сообщение от Voivoid Посмотреть сообщение
Лол, ты так себе работу тред-пулов представляешь, да?
Нет, примерно вот так:
C++
1
2
3
4
5
6
7
8
9
10
void WindowsMustDie(void * Param){
   SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
   while(1);
}
void main(){
      SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
      SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
      unsigned __int64  ThreadId;
      while(1)  CreateThread (NULL,1024,WindowsMustDie,NULL,0,&ThreadId);
}
Добавлено через 9 минут
Цитата Сообщение от Voivoid Посмотреть сообщение
Поправил тебя
Ошибаешься. Многопоточные приложения делал еще году эдак в 1997-ом. Да и до этого раблту с прерываниями тоже пользовал постоянно. Тоже кстати мультитрединг, только с переключением потоков не с квантованием времени а по внешнему событию.
0
 Аватар для cybercitizen
204 / 26 / 5
Регистрация: 22.05.2015
Сообщений: 357
03.10.2015, 20:21
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Нет, примерно вот так
Никто и не сомневался что ты не слышал про управление потоками. Один id на бесконечность потоков — это фейл.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.10.2015, 20:30  [ТС]
Цитата Сообщение от cybercitizen Посмотреть сообщение
Никто и не сомневался что ты не слышал про управление потоками. Один id на бесконечность потоков — это фейл.
Если заметил цель приведенного примера подвесить ось любого суперкомпутера. И этот код это сделает. Так что не фэйл а универсальное решение задачи подвешивания оси.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
04.10.2015, 00:13
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если заметил цель приведенного примера подвесить ось любого суперкомпутера.
Т.е. ничего, что в никсах этот код не скомпилирутеся, а винду на суперкомпьютеры не пускают?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
04.10.2015, 12:04  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Т.е. ничего, что в никсах этот код не скомпилирутеся, а винду на суперкомпьютеры не пускают?
Даже если CreateThread под никсами называется по другому то смысл кода будет тот же. Загрузить все конвейеры потоками с максимальным приоритетом.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
04.10.2015, 12:50
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Загрузить все конвейеры потоками с максимальным приоритетом.
Угу, в однопоточном коде достаточно бесконечного цикла. В чём твоя мысль? Что ты способен написать говнокод в любых условиях?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.10.2015, 12:50

Minecraft Coder Pack или куча ошибок в консоли
Как решить все эти проблемы?

Как задействовать многопоточность для обработки больших запросов в WebBrowser
Здравствуйте,нужна помощь. Как создать потоки,многопоточность,в программе присутствует веб браузер,далее цикл на поиск некого значение на...

исправьте мою криворукость
С рождения проблемы с процедурами, ошибки при объявлениях помогите исправить: #include <iostream> #include <cstdlib> ...

Как вылечить криворукость
Здравствуйте. У меня хроническая форма рукопопия. У меня постоянно ломается техника, которую приносят на ремонт. Создается впечатление, что...

Криворукость и методы ее лечения
Господа, подскажите старому паскалисту, по привратности судьбы занесенному в дебри WEB дизайна, что не так в этой строчке: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru