Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-16898
VIB
2003-02-14 16:34
2003.03.06
Тип поля


6-17239
M_a_x
2003-01-18 23:58
2003.03.06
Все тот же WebBrowser....


6-17249
Grin
2003-01-14 15:59
2003.03.06
TidHttp в цикле после неудачного запроса больше не конектится


1-17089
UDS
2003-02-25 21:28
2003.03.06
Проблема с заполнением динамических массивов.


6-17252
Cosmic
2003-01-16 12:21
2003.03.06
Winsock-сервер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский