|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|||
.NET 4.x Прошу консультации экспертов (ООП, многопоточность)16.11.2016, 13:02. Показов 7078. Ответов 45
Здравствуйте уважаемые форумчане! Давеча пытался устроиться на работу и прислали мне тестовое задание, далее привожу его текст:
Так в итоге и оказалось. Мне вежливо отказали дополнив комментариями касательно кода:
0
|
|||
| 16.11.2016, 13:02 | |
|
Ответы с готовыми решениями:
45
Прошу совета экспертов о смене провайдера интернет Прошу консультации! |
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 16.11.2016, 18:50 | |
|
TopLayer, да, действительно. Значит я ошибся, в любом случае ошибка не критичная и никак не влияющая на выполнение задачи программой.
0
|
|
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|
| 16.11.2016, 18:54 | |
|
0
|
|
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 16.11.2016, 18:57 | |
|
0
|
|
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|||||||
| 16.11.2016, 19:24 | |||||||
|
Добавлено через 23 минуты Exerion, А вот я против таких строчек while (!exitFlag), где переменная используется несколькими потоками. Считаю, что если речь не идёт об убероптимизации, то нужно явно синхронизировать доступ, при помощи Interlocked или хотя бы объявлять поле волатильным. Потому что результат работы этой строки неявно зависит от наличия вызовов .WaitOne() и .Set(), что является неочевидным.
0
|
|||||||
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 16.11.2016, 19:40 | |
|
0
|
|
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
||||||
| 16.11.2016, 19:45 | ||||||
|
Exerion, Вы заджоиниваете старый поток. А что если метод
1
|
||||||
|
[Bicycle Reinventor]
|
||
| 16.11.2016, 19:55 | ||
|
Этот по крайней мере легко исправить, если заджоиниванию таймаут поставить. Например, нет обработки исключений в потоках. Если что отвалится - внешний try catch вряд ли это отловит. Также момент с типом количества блоков. Пробовал работоспособность на файле в 7Гб - если размер блока будет достаточно маленьким, то количество блоков не влезет в int32 и оно станет отрицательным. Ну и ещё наверняка куча всего, о чём я и не догадываюсь.
0
|
||
|
14747 / 9521 / 1364
Регистрация: 21.01.2016
Сообщений: 35,916
|
|||
| 17.11.2016, 06:33 | |||
|
Добавлено через 9 минут Только атомарный инкремент действительно работает немного по-разному на x86 и x64. Вот выдержка из статьи на википедии:
0
|
|||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
||
| 17.11.2016, 07:25 | ||
|
Не по теме: Не ожидал такой подставы от арифметических операций :D
0
|
||
|
14747 / 9521 / 1364
Регистрация: 21.01.2016
Сообщений: 35,916
|
||
| 17.11.2016, 07:28 | ||
Interlocked.Increment() - обёртка над процессорной командой cmpxchg. Ты можешь что-то быстрее изобрести?
0
|
||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|||
| 17.11.2016, 07:48 | |||
|
Usaga, я не могу изобрести более быстрый атомарный инкремент. Я лишь удивлён тем, что этот атомарный инкремент используется повсеместно на х86. Ведь это снижает производительность (я не спец, может я и неправ).
http://faydoc.tripod.com/cpu/cmpxchg.htm
1
|
|||
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
||
| 17.11.2016, 13:13 | ||
|
1
|
||
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|
| 17.11.2016, 23:40 [ТС] | |
|
Спасибо, что откликнулись! Из всего прочитанного сделал вывод, что однозначно лучшего подхода нет, надо исходить из поставленной задачи и подбирать вариант реализации. Думаю надо параллельно (!) изучать теорию и опробовать на практике с замером производительности.
Кстати, есть ли вариант многопоточной загрузки файла в ОЗУ. Для примера, есть метод считывающий данные из файла Excel (или базу SQLite) и формирующий на его основе DataTable, как реализовать в данном случае?
0
|
|
|
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 4
|
|
| 20.11.2016, 22:02 | |
|
Здравствуйте!
Начал изучать многопоточность (по Рихтеру), выполняю упражнения и заодно смотрю коды опытных программеров. Запустил Ваш код, и обратил внимание, что блоки выводятся на консоль непоследовательно. Это нормально для потоков или допущена ошибка? З.Ы. еще не совсем понял, почему Вы создаете отдельный класс FileStreamer, какой у него смысл?
0
|
|
|
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 4
|
|
| 20.11.2016, 22:05 | |
|
Здравствуйте!
Недавно начал изучать потоки (по Рихтеру) и заодно просматриваю коды опытных программеров. При запуске Вашего кода обнаружил, что некоторые блоки выводятся непоследовательно (см. скриншот) Это нормально для потоков или допущена какая-то ошибка?
0
|
|
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|
| 20.11.2016, 22:30 [ТС] | |
|
AlexPtr, здравствуйте, блоки могут обрабатываться непоследовательно поскольку каждый поток работает со своим блоком файла и позже запущенный может закончить раньше чем его предшественник.
1
|
|
|
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 4
|
|
| 20.11.2016, 22:40 | |
|
Спасибо. Понял. Пожалуй, потоки одна из самых сложных (но интересных) тем в курсе C#.
Еще такой вопрос - можете посоветовать хорошую литературу на тему многопоточности? В книге Рихтера все подробно рассмотрено, но примеров маловато.
0
|
|
|
[Bicycle Reinventor]
|
|
| 21.11.2016, 08:55 | |
|
Joseph Albahari о многопоточности в C# в пяти частях: тык.
На RSDN есть переводы некоторых частей: первая, вторая. Остальные, скорее всего, придётся искать в кеше гугла, потому что их выпилили. Помнится у кого-то из старичков форума были сохранены эти переводы.
0
|
|
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
||
| 21.11.2016, 09:59 | ||
|
PS: Данное решение с точки зрения ООП является не очень правильным - пример уважаемого Exerion более точно соответствует парадигме, хотя и является чуть более медленным. Для обучения лучше использовать именно его.
0
|
||
| 21.11.2016, 09:59 | |
|
Прошу консультации по iptables Прошу консультации в выборе! Прошу Вашей профессиональной консультации Прошу консультации по поводу запросов Учусь водить, прошу консультации :) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа опроса у.з. расходомера 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, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|