Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.06;
Скачать: CL | DM;

Вниз

многопоточная обработка использующая один програмный код ...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
1-17108
БурЖуй
2003-02-25 22:46
2003.03.06
перекодировка html


3-16976
mate
2003-02-16 17:13
2003.03.06
ADO и Базы Данных.


1-17126
.::D.e.M.o.N.i.X::.
2003-02-22 17:54
2003.03.06
Как использовать две картинки из ImageList для TreeView


1-17192
StarCon
2003-02-24 12:36
2003.03.06
ActivX на Delphi


3-16866
JibSkeart
2003-02-03 16:32
2003.03.06
Отправить данные сторонней программе из