|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||
Архитектура: парсинг и выгрузка текстовиков11.03.2020, 10:51. Показов 34617. Ответов 421
Метки вопросы наследования (Все метки)
начало было положено в ветке - Считать текстовые файлы из папки - там и возник вопрос об Архитектуре...
собрала... осталось отображение создать (типа I_tbl_Show) и пронаследовать ? в разные классы пункта назначения (или на консоль, или в файл, или в БД, или допустим ещё в форму)... N.B. классы (пункты-назначения) делать не надо - эти View уже реализованы разработчиками того ПО, на котором сейчас идёт работа... а) пока что можно просто прописать функции-члены класса; и по месту использовать, что надо при разработке - в файл или на консоль; б) в перспективе для Release - реализовать и откомпилировать и выгрузку и в файл, и выгрузку в БД, и отражение в DataGrid... === !! Т.Е. если в Release захочется и выгрузку в текст, и в БД, и допустим ещё в форму (например с разных кнопок сделать) - тут уж лучше и писать, как положено, наследование??... -- к слову из прошлой ветки о: === Обоснование выбора уровня Абстракции (I_tbl_Show со всеми виртуальными функциями): чтобы не дублировать код-сбора-для-выгрузки -- сделать class Table - и класс-интерфейс I_tbl_Show, в котором обозначить virtual-функции выгрузки... эти функции определить в др. классах - типа Interface (IwriteCSV, IwriteDB, IwriteDataGrid)... p.s. классы консоль, файл, бд, DataGrid - не создаём, т.к. эти пункты назначения уже присутствуют... p.p.s. вывести конечные интерфейсы с определёнными методами записи на кнопки... === ИЛИ то, что подчёркнуто чуть выше, стоит реализовать в одном классе Table, и здесь же задать все virtual функции ?? === на скрине: синие - классы, зелёные - интерфейсы (в с++ по сути тоже классы) птицами отмечены уже кое-как реализованные классы (2 птицы) курсивные стрелки - отсутствие наследования ![]() Добавлено через 7 минут вобщем вопрос: class Table и класс I_Tbl_Show - объединить или нет? Добавлено через 10 минут p.p.s. чтобы избежать проблем Ромба и такого: Неоднозначность при множественном наследовании
0
|
||||
| 11.03.2020, 10:51 | |
|
Ответы с готовыми решениями:
421
Проверка двух текстовиков
Сделать скрипт для вывода текстов из текстовиков |
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 28.05.2020, 20:43 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||
| 28.05.2020, 21:00 [ТС] | |||||||
|
=== вот, например, беру 1-ю попавшуюся реализацию: Кликните здесь для просмотра всего текста
- правильно ли я вас поняла и правильно ли применила в main() под спойлером ?? -- т.е. совсем без циклов... - 1 строка - у меня выполняется в 10-ти потоках (где я её потом join'ю? - хотя у меня packaged_task - наверно там и собирается всё), т.е. по сути ~ в 2 раза быстрее (т.к. 2 ядра) или даже ещё быстрее... ? Добавлено через 4 минуты и как мне добавить и запустить туда следующую фразу "Hello again"?.. - в порядке очерёдности в цикле?.. (ну допустим - это имитация подгрузки 2-х линков через пул потоков) - как должно выглядеть?.. и как расставить мьютексы в main'e? ... или они вроде уже в классе/структуре расставляются, похоже там в коде
0
|
|||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 28.05.2020, 21:08 | |||||||
1
|
|||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 28.05.2020, 21:11 [ТС] | |
|
ок, завтра буду пробовать... зациклить на моё тз... если ускорится
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
| 28.05.2020, 21:11 | ||||||
|
Или то же самое
1
|
||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 31.05.2020, 19:10 [ТС] | ||
|
Потоки и процессы - правда Python, но разница между процессом и потоком очерчена достаточно - мой вывод: хоть с 1-го сокета и можно запустить только 1 процесс, но количество потоков в нём можно сделать любое...
с форума на U++ (пост 19 September 2017 10:12) чётко вырисовывается последовательность, что сначала Loop по Arr, внутри него Loop на свободный CPU Core... (когда они ещё разрабатывали свои библы для многопоточности)... т.е. по сути уровень_абстракции_Jobs с вложенным уровнем_абстракции_Workers рассматриваются... Scheduler'a там я вроде не заметила - хотя если это lightweight-вариант, как название той ветки, то может он и не нужен, раз вам код в полу_ручном варианте выбирает себе Worker'a... насколько поняла... 10 советов по многопоточному программированию на Java - 2 из которых (4 и 8) вы уже оставили в этой ветке... !3-й и в связи с ним 9-й мне тоже показались очень заслуживающими внимания... в связи с этим моё заключение: Планирование Потоков - вообще очень важный этап в написании ТЗ - чтобы бездумным распараллеливанием не добавить тормозов... ... как и стремление к уменьшению областей синхронизации важно в коде (где потоки сливаются в один, условно, говоря, или использование атомарных счётчиков)...также на заметку: - join - "блокирует дальнейшее выполнение родительского потока, до тех пор, пока не будет завершён дочерний" -detach - "неблокирующий метод" = ну это на случай если всё-таки начну выделять потоки сама в рукописном классе... потому что все имеющиеся в std классы по потокам, думается мне, нуждаются в создании для них удобного wrapper'a, чтобы использовать без необходимости штамповать код дублируя его... в принципе thread_pool выше - один из вариантов приемлемой обёртки... === но ваш последний async-пример без использования pool_thread (не лезу читать std::future header) - тоже заинтересовал - вообще без thread_pool ?? - будет ли такая же скорость? === (ой не хочу усложнять ход мыслей - может, по простому сам цикл for Arr и есть условный Producer, а его внутренности условный Consumer?.. если суть Producer'a задавать атомарные единицы для итерирования) === Кликните здесь для просмотра всего текста
всё-таки
- всё-таки потоки - это новый уровень абстракции, не связанный с итерированием своих баранов... хоть atomic-обёртки для итератора и стоит не забывать при параллельной обработке данных... но сами птоки вступают в работу внутри каждого шага Loop по циклу данных...
=== вопрос, КАК расставить Семафоры, чтобы не колотить по чужому сайту остаётся (если запуск потоков осуществлять внутри Loop Arr) ... - пример named_semaphore (на линк вышла отсюда)- наверно, пока обкатаю boost'овские (не WinAPI) - как-то проще кажется (более высокоуровнево в boost'e, чем в std)... если пойму как и стоит ли... всё-таки подбор библиотеки - занятие не из лёгких, когда свои ещё не пишешь...=== Методика разработки многопоточных приложений: принципы и практическая реализация -- всё-таки с отладкой потоков и отловом исключений я пока на вы P.S. Аппаратная реализация - вот бы её хватало... что-то замечаю, что даже vba-код сам по себе уже стал как-то подгружать конкурентно, а не как раннее - последовательно... сама удивляюсь ему
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.05.2020, 19:16 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 31.05.2020, 19:21 [ТС] | ||
|
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.05.2020, 19:34 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||||||
| 01.06.2020, 22:37 [ТС] | ||||||||
|
?? если через std::map -- то, полагаю, как-то так:
p.s. вообще семафоры поуниверсальнее, чем condition_variables. т.к. последние использоваться начали для win7... спасибо за совет... p.p.s. и ещё вопрос: может стоит семафор включать-выключать на, например, 10 линков - so named многоместный турникет ?.. хотя для данного случая (инкрементирование i) - это не пройдёт ? (т.к. эти 10 между собой устроят race condition)... === вобщем правильно ли моё видение вашего совета по коду ? или можно быстрее (т.е. уменьшить количество мест синхронизации или использовать иные примитивы синхронизации)... хотя по совсем atomic - выдержку видела - видимо, не совсем comme ils faut
0
|
||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 01.06.2020, 22:43 | |||
|
Добавлено через 1 минуту
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||
| 01.06.2020, 23:17 [ТС] | ||||
|
я i рассматривала, как shared_value - вот и расставила до обращения к нему и после обращения к нему... всё-таки каждое i в поток
(мне вообще о нём надо забыть в этом тз, когда дело доходит до потоков) Добавлено через 4 минуты Добавлено через 4 минуты
0
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||||||||||
| 02.06.2020, 10:47 [ТС] | ||||||||||||
![]() Добавлено через 10 минут === я прбовала сделать такой вариант - для чтения файлов:
с такими функциями
- не знаю, насколько такой подход может быть логичен? - тут вроде вообще без синхронизации - не будет ли race condition?.. хотя вроде не должно быть - т.к. просто загоняем в async всё, что надо сделать, а потом типа, наверно, коллбэком достаём из фьюча?.. я пока механику асинхронности вижу так...
0
|
||||||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 02.06.2020, 15:30 | ||
|
Кроме того, эта пара функций должна вызываться в одном потоке.
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||||||
| 02.06.2020, 20:39 [ТС] | ||||||||
|
пару линков всё-таки оставлю:
writer-reader, aka producer-consumer по сути, вероятно... (чтобы знать как выглядит) и winAPI семафоры... в std - только в c++v.20 counting_semaphore появляется - если всё-таки "многоместный турникет" выбрать... === Добавлено через 12 минут по типу такого
потом в них применять эту пару, чтобы задействовать семафор "до" и "после" Критической Секции (вопрос: где она??)... и итератор, как shared_value, как мне показалось ранее, тут не причём... ? но всё равно как-то визуализировать потоки сложно - если за async'ом стоит пул потоков... ?.. как туда впихнуть wait-notify семафора для каждого потока... - в саму лямбду...
0
|
||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 02.06.2020, 20:47 | ||
|
Добавлено через 3 минуты Я что-то потерял нить, что ты вообще пытаешься сделать. Подозреваю, там задача довольно простая
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||
| 02.06.2020, 22:01 [ТС] | |||||
|
вобщем вопрос: async запускать на каждую итерацию по циклу или, как я пробовала с подгрузкой из файлов - сам цикл по линкам (весь) разместить в asynce?.. и там же как-то пропускать каждый шаг цикла через семафор... опять же только загрузку или на время сохранения в файл семафор тоже оставлять в заблокированном виде (wait) ? чтобы не членить на процессы для того, чтобы они потом стояли в очередь на семафор?.. (наверно, в этом вопрос - сократить этапы синхронизации) Добавлено через 7 минут я тоже только подозреваю... беру список линков - (наверно переделаю в map - к ним пути файлов, куда сохраняться) - гружу асинхронно по возможности не разрывая связь - хотя запросы GET всё-таки отдельные объекты на каждый линк... но в любом случае - ещё потом и записать IO в файлы (каждый линк в свой файл)... и чтобы в максимально короткое время это сделать... вот и думаю, как разбросать по потокам...ИЛИ каждый линк в отдельный поток запускать (т.е. своя async для каждого)?.. как лучше? ... все линки к одному сайту - разные urls Добавлено через 4 минуты и нужен ли мне тут семафор ![]() Добавлено через 2 минуты p.s. это кстати жёлтое облако на скрине #1 ветки... Добавлено через 18 минут === кстати здесь я только счётчик по циклу меняю... но если цикл положить в async - то там свои дела - синхронизировать не надо... имхо
0
|
|||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 02.06.2020, 22:04 | ||
|
По сути там описан асинхронный обработчик задач. Эти задачи кладутся в очередь, потом потоки забирают их оттуда и выполняют. Каждая задача - это твой линк, который нужно загрузить/сохранить. Так как сайт у тебя один, то для того, чтобы ограничить количество коннектов к нему, достаточно будет просто запустить ограниченное количество потоков-обработчиков (оно там параметром задаётся)
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 02.06.2020, 22:13 [ТС] | ||
|
p.s.
но Single lane bridge Synchronization using semaphores лучше погуглить... (если сайт не пропустит все линки быстро) Добавлено через 4 минуты
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
| 03.06.2020, 09:03 [ТС] | |||
Очередь конкурирует за процессорное время... Многоядерность - выгодна для математических вычислений (если в рамках входящих в функцию параметров выделяются atomic элементы и/или шаги обработки)... p.s. и много интересных примеров - правда на header'e от Stanford University... но header и свой когда-нибудь можно написать... а задачу о ticketSellers - о том, какой поток продал сколько ticket'ов - для практики полезно хотя бы визуализировать те потоки... как и др задач...p.p.s. после Планирования Потоков см. Менеджмент потоков (с пониманием основных проблем - race conditions, deadlocks, greedy for resources etc)... и цикл статей Кенни Керра полезен в этом контексте...
0
|
|||
| 03.06.2020, 09:03 | |
|
В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников Ошибка "в указанном dsn архитектура драйвера и архитектура приложения" Архитектура бд Архитектура БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|