Форум: "Основная";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
Внизмногопоточная обработка использующая один програмный код ... Найти похожие ветки
← →
sapsan (2003-02-22 22:31) [0]доброго времени суток !
решил значит я использовать в программе многопоточную обработку данных и поначалу пошел таким путем:
1. создал коллекцию, елементами которой являются потоки;
2. каждый поток имеет свой собственный класс, переменные и методы которого предназначены для работы со своими "личными" данными
(в данном случае класс можно было и не создавать, а реализовать эти же методы в самом потоке, но я решил - "мухи отдельно, а котлеты отдельно" - на перспективу)
и тут у меня появились кое-какие сомнения.
а именно - такое использование класса-обработчика мне показалось похожим на многократное использование динамической библиотеки методом ее переименовывания (something.dll, something1.dll, something2.dll и т.д.) и подлинковывания как разных библиотек для того же одновременного параллельного использования имеющегося там (в библиотеке) кода.
так вот и сам вопрос:
будет ли корректным использование для работы в разных потоках одного класса-обработчика (как обрабатывающего програмного кода) с раздельными переменными индивидуальными для каждого потока ?
и если да, то не пострадает ли от этого расспаралеливание на многопроцессорных системах ?
P.S.
в литературе, которая мне попадалась, я описания этого ньюанса не встречал....
если что - кидайте линки - искать и читать не боюсь
спасибо...
← →
BPK (2003-02-22 22:45) [1]Мне кажется, что созданные объекты УЖЕ ориентированы на многопоточность, и искусственно вводить дополнительные потоки не надо (один объект = один поток).
Варианты, при которых НЕОБХОДИМО явно создавать потоки:
1. Процедуры и функции ВНЕ объекта, которые должны выполняться параллельно;
2. Необходимость параллельно текущих ветвей обработки данных ВНУТРИ ОДНОГО объекта.
← →
BPK (2003-02-22 22:51) [2]Кстати, когда Вы используете объекты, созданные на основе одного и того же класса, то ВСЕГДА используются:
1. ИНДИВИДУАЛЬНЫЕ наборы данных (поля объекта) - свой для каждого экземпляра объекта,
но
2. ОБЩИЕ для всех экземпляров методы, т.е. программный код один для всех экземпляров.
← →
sapsan (2003-02-22 23:07) [3]//1. создал коллекцию, елементами которой являются потоки;
начальное количество потоков не известно
//2. каждый поток имеет свой собственный класс, переменные и методы которого предназначены для работы со своими "личными" данными
а именно будут обрабатываться N файлов паралельно
//Кстати, когда Вы используете объекты, созданные на основе //одного и того же класса, то ВСЕГДА используются:
//1. ИНДИВИДУАЛЬНЫЕ наборы данных (поля объекта) - свой для каждого экземпляра объекта,
но
//2. ОБЩИЕ для всех экземпляров методы, т.е. программный код один для всех экземпляров.
а вот и ответ, спасибо
← →
sapsan (2003-02-24 10:24) [4]
> 1. ИНДИВИДУАЛЬНЫЕ наборы данных (поля объекта) - свой для
> каждого экземпляра объекта,
>
> но
> 2. ОБЩИЕ для всех экземпляров методы, т.е. программный код
> один для всех экземпляров.
лучше поздно, чем никогда:
а как насчет локальных переменных в методах ???
← →
sapsan (2003-02-24 17:52) [5]А-А-А-У-У-У-У...
народ...
если не знаете, то киньте хоть ссылкой...
← →
i-C3H7OH (2003-02-25 02:58) [6]Мне кажется, что созданные объекты УЖЕ ориентированы на многопоточность, и искусственно вводить дополнительные потоки не надо (один объект = один поток).
объект в общем случае никак не связан с потоком
локальные переменные в каждом методе свои. всегда.
сам посуди: когда работают 2 потока они не замечают друг друга правильно?
а если бы локальные п. разделялись? 1 поток влиял бы на другой случайным образом.
в ДЛЛ та же концепция: код 1 на всех, глоб пременные у всех свои
← →
Alex Konshin (2003-02-25 03:26) [7]Ты про синхронизацию еще почитай, пока не началось...
Тот же TCollection (как и большинство других классов из VCL) не thread-safe. Если ты с таким объектом работаешь исключительно из одной нити, то сойдет, если же нет...
← →
sapsan (2003-02-25 20:46) [8]меня волнует немного не то, а именно
делаю я так:
> 2. каждый поток имеет свой собственный класс, переменные
> и методы которого предназначены для работы со своими "личными"
> данными
> (в данном случае класс можно было и не создавать, а реализовать
> эти же методы в самом потоке, но я решил - "мухи отдельно,
> а котлеты отдельно" - на перспективу)
потом мне объясняют, что:
> Кстати, когда Вы используете объекты, созданные на основе
> одного и того же класса, то ВСЕГДА используются:
>
> 1. ИНДИВИДУАЛЬНЫЕ наборы данных (поля объекта) - свой для
> каждого экземпляра объекта,
>
> но
> 2. ОБЩИЕ для всех экземпляров методы, т.е. программный код
> один для всех экземпляров.
это все мне объясняет относительно наследника TThread, но у меня:
> каждый поток имеет свой собственный класс, переменные и
> методы которого предназначены для работы со своими "личными"
> данными
этот "свой собственный класс" будет создаваться наследником TThread
и вот тут меня интересует будут ли проблемы с локальными переменными методов екземпляра "свой собственный класс" ???
или они тоже "уйдут" в личный стек екземпляра "свой собственный класс" как и
> ИНДИВИДУАЛЬНЫЕ наборы данных (поля объекта) - свой для каждого
> экземпляра объекта
?????
в то время как
> ОБЩИЕ для всех экземпляров методы, т.е. программный код
> один для всех экземпляров
меня смущает формулировка "(поля объекта)". Это ведь не локальные переменные методов ...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c