Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2016, 21:01   #21
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

darkwellroad
Цитата:
Как организовать пул из изображений без критической секции?
На мьютексах или спинлоках.
Но вопрос вы задаёте не правильно. Любая синхронизация есть потеря времени.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 17.02.2016, 08:16   #22
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от darkwellroad Посмотреть сообщение
Блин, ну и срач вы тут развели... Сори за оффтоп. Тему можно наверно закрывать.. Буду писать дальше. И кстати... Как организовать пул из изображений без критической секции?
Попробуй через сообщения
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
http://www.programmersforum.ru/showthread.php?t=109643

Или
а) изначально разбей весь набор на равные N частей (N - кол. потоков).
б) скармливай набор потокам частями (порциями).
Основному потоку (окну) останется дожидаться от каждого потока сообщение об окончании работы, типа
внимание: код вслепую (печатал стазу тут)
Код:
SendMessage (Application.MainForm.Handle, WM_USER_THEEND, WPARAM(idThread), 0);
Или
Цитата:
Сообщение от Pavia Посмотреть сообщение
На мьютексах или спинлоках.
Sibedir вне форума Ответить с цитированием
Старый 17.02.2016, 09:39   #23
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Блин, ну и срач вы тут развели... Сори за оффтоп. Тему можно наверно закрывать.. Буду писать дальше. И кстати... Как организовать пул из изображений без критической секции?
Есть такой класс очереди TQueue, вы добавляете туда элементы, а ваши рабочие потоки, в крит. секции делают Extract элемента первого элемента из очереди.
Если хотите без крит. секции, на каждый поток делайте буферную очередь, куда основная очередь будет класть элементы когда сам сможет. Тогда каждый поток будет обращаться к своей буферной очереди без крит. секций. (Опять же надо грамотно это реализовывать).

Sibedir, В какой-то момент времени 2 потока получают сообщение - какое-кому? Там разные картинки, как проверить если это имеет значение?

Цитата:
а) изначально разбей весь набор на равные N частей (N - кол. потоков).
б) скармливай набор потокам частями (порциями).
Неэффективно. Внезапно появилось ещё пара сотен пикчей, им придется ждать завершения всего цикла обработки.

Последний раз редактировалось Человек_Борща; 17.02.2016 в 09:42.
Человек_Борща вне форума Ответить с цитированием
Старый 17.02.2016, 12:06   #24
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Если хотите без крит. секции, на каждый поток делайте буферную очередь, куда основная очередь будет класть элементы когда сам сможет.
Я почти это и имел в виду.
Наверное не правильно выразился. Короче, смысл один: каждый поток обрабатывает ограниченную область данных, переданную ему в безграничное пользование, но лишь на время.
Цитата:
Сообщение от Sibedir
а) изначально разбей весь набор на равные N частей (N - кол. потоков).
б) скармливай набор потокам частями (порциями).
Эта самая порция и есть 'буферную очередь'.

-----------------------------------------------------------------
Цитата:
Неэффективно. Внезапно появилось ещё пара сотен пикчей, им придется ждать завершения всего цикла обработки.
Ну да, всё правильно. Если картинки, в какой-то промежуток времени, поступают быстрее, чем они обрабатываются, то им-таки придется ждать своей очереди.
А если картинки всегда поступают быстрее, чем обрабатываются, то это неизбежно приведет к переполнению чего-нибудь (памяти, диска, дескрипторов открытых файлов).

-----------------------------------------------------------------
Цитата:
Sibedir, В какой-то момент времени 2 потока получают сообщение - какое-кому? Там разные картинки, как проверить если это имеет значение?
Не понял.
Цитата:
какое-кому?
Кому отправили, тот и получит.
Или как?

Последний раз редактировалось Sibedir; 17.02.2016 в 12:12.
Sibedir вне форума Ответить с цитированием
Старый 17.02.2016, 12:36   #25
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Кому отправили, тот и получит.
Или как?
Мы говорим о потоках, или вы удумали для каждого потока ещё и окно создавать. Зачем?

Придется в сообщении указывать, какому потоку сообщение.
Человек_Борща вне форума Ответить с цитированием
Старый 17.02.2016, 13:42   #26
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Я предложил, как вариант, для каждого потока создавать очередь сообщений. Та же синхронизация, но очень удобоваримая.
Цитата:
Придется в сообщении указывать, какому потоку сообщение.
В таком разе вообще теряется смысл использования сообщений, если мы решаем задачу в рамках одного приложения.
Цитата:
вы удумали для каждого потока ещё и окно создавать. Зачем?
Как правильно заметил, Pavia (да, думаю, никто и оспаривать не станет).
Цитата:
Сообщение от Pavia
Любая синхронизация есть потеря времени.
Sibedir вне форума Ответить с цитированием
Старый 17.02.2016, 14:05   #27
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Любая синхронизация есть потеря времени.
Да, но зависит от реализации ПО. Если ПО залочило объект, и не разблокирует его пока не обработает объект - это катастрофа.
Если объект блокируется только на время изъятия элемента для работы - это нормально.

Ну и основная потеря времени это обработка элемента потоком, а в быстроте крит. секций сомневаться можно только в том случае если реализация кривая с использованием этих самых секций.
Человек_Борща вне форума Ответить с цитированием
Старый 17.02.2016, 15:01   #28
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Ну и основная потеря времени это обработка элемента потоком, а в быстроте крит. секций сомневаться можно только в том случае если реализация кривая с использованием этих самых секций.
Человек_Борща, я чё-т не допонял. Ты имеешь в виду, физический сегмент памяти или логический? Понятие - "секция", что это? Впервые услышал в твоём лексиконе. Может я что-то пропустил?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 17.02.2016, 15:38   #29
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Человек_Борща, я чё-т не допонял. Ты имеешь в виду, физический сегмент памяти или логический? Понятие - "секция", что это? Впервые услышал в твоём лексиконе. Может я что-то пропустил?
Эмм, критические секции, разрешающие проблемы асинхронного доступа. Давно существуют Или ТС не про эти секции?
Человек_Борща вне форума Ответить с цитированием
Старый 17.02.2016, 16:28   #30
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Тьфу-ты ну-ты! TCriticalSection Class, это из VCL библиотеки. Проще говоря, это класс привилегированного процесса. Вот, чего я не люблю. Назовут яйцо - ovum или egg. Иди потом и разбирайся, что к чему.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 17.02.2016 в 16:31.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нейросети stdensa Фриланс 1 11.10.2014 17:23
нейросети в делфи. annuchka Помощь студентам 0 23.12.2013 17:51
нейросети С# Екатерина777 Помощь студентам 0 18.12.2012 22:01
Нейросети Kuzma_ua Общие вопросы C/C++ 0 04.02.2011 00:57
Scilab + нейросети dox07 Помощь студентам 0 08.01.2011 18:28