|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||
Архитектура: парсинг и выгрузка текстовиков11.03.2020, 10:51. Показов 32490. Ответов 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,549
|
|||||||
| 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,549
|
|
| 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,549
|
||
| 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,549
|
||
| 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,549
|
||||||||
| 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,549
|
||||
| 01.06.2020, 23:17 [ТС] | ||||
|
я i рассматривала, как shared_value - вот и расставила до обращения к нему и после обращения к нему... всё-таки каждое i в поток
(мне вообще о нём надо забыть в этом тз, когда дело доходит до потоков) Добавлено через 4 минуты Добавлено через 4 минуты
0
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||||||||||
| 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,549
|
||||||||
| 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,549
|
|||||
| 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,549
|
||
| 02.06.2020, 22:13 [ТС] | ||
|
p.s.
но Single lane bridge Synchronization using semaphores лучше погуглить... (если сайт не пропустит все линки быстро) Добавлено через 4 минуты
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||
| 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 архитектура драйвера и архитектура приложения" Архитектура бд Архитектура БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
начало и оглавление
-
Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|