Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Многопоточность в CGI [D7, WinXP]


Страницы:   1 2

phantom ©   (2007-12-13 11:28:00) 

Подскажите в чем разница между программированием нескольких потоков в CGI и в формах. Я написал код в форме в котором несколько потоков обращаются к объектам TTable и это все работает, но когда я этот код переношу в CGI. Поток при попытке обратится к TTable получает ошибку что объекта по данному адресу нет. Заранее спасибо.


Palladin   (2007-12-13 19:49:00) [1]


> Anatoly Podgoretsky ©   (13.12.07 18:51) [23]

так понятно... я как раз случаи с множественным ожиданием и имею ввиду... с единственным-то понятно... порождение потоков довольно глупо... если конечно это "единственное" невозможно парралелизировать в случае многопроцессорной системы... нюансов много...


Anatoly Podgoretsky   (2007-12-13 18:51:00) [2]

> Anatoly Podgoretsky  (13.12.2007 18:35:22)  [22]

Добавление - при условии, что есть более одного длительного запроса. При одном длительном запросе нужды в потоке нет, само CGI приложение или расширение и так в отдельном потоке.


Anatoly Podgoretsky   (2007-12-13 18:35:00) [3]

> Palladin  (13.12.2007 17:10:21)  [21]

Конечно не только базы, а любые долговременные запросы и вычисления. К самому CGI и необходимости ему потоков отношения не имеет.


Palladin   (2007-12-13 17:10:00) [4]


> Anatoly Podgoretsky ©   (13.12.07 16:52) [20]

что ждать?
заявление было обобщенное, потокам в CGI не место... отвечено было:место и очень часто...

главный поток исполнения CGI отвечающий за свод информации из нескольких источников, запускает запросы именно в потоках...  сколько запросов столько и потоков... нельзя было предсказать время отклика разных БД на разные запросы...

да и дело не только в базах, на них внимание заострять не стоит. например см. [18]

не мне тебе рассказывать значимость и место применения многопоточности, конечно иногда в CGI она не нужна, но все делается к месту и по ситуации... и разговоры о бессмысленности многопоточности в CGI эээ... ладно... не буду говорить чем они попахивают :)


Anatoly Podgoretsky   (2007-12-13 16:52:00) [5]


> Palladin ©   (13.12.07 16:09) [17]

Подожди, ты про базы, тогда обращения должны делаться в отдельном потоке и синхронизация.


Palladin   (2007-12-13 16:43:00) [6]


> phantom ©   (13.12.07 16:35) [18]

что ж ты молчал про 4хэ-процессорность... :) никто бы не выступал что про многопоточность CGI :)


phantom   (2007-12-13 16:35:00) [7]

Доступ как ни странно не монопольный, индекс создается в памяти для каждой CGI свой. четырех процессорный сервер с RAID справляется с поставленой задачей. Процесс действительно быстрее (смотел по загрузке).
Сначала тоже хотел крутить фоновый сервис на сервере чтоб все строил зарание , Это новерно в даной ситуации самый лучьший вариант.


Palladin   (2007-12-13 16:09:00) [8]


> Anatoly Podgoretsky ©   (13.12.07 15:54) [16]

причем тут инструмент? смысл есть. привожу пример. разрабатывали мы КИС для администрации МО МС. баз туева хуча, всяких разных, информацию местами собирать нужно из нескольких, у многих отделов разное ПО, где то на клиппере, где то на оракле, где то в DBF, где то вообще... экзотические решения ( "парус" или "флиппер" например :) )... и тд... время отклика тоже разное... бо сам понимаешь... откуда у администрации деньги на высокропроизводительные машины... соответственно самое оптимальное решение данные брать по потокам...


Anatoly Podgoretsky   (2007-12-13 15:54:00) [9]

> Palladin  (13.12.2007 15:52:15)  [15]

Смысла нет, если только инструмент не умеет работать ассинхронно.


Palladin   (2007-12-13 15:52:00) [10]


> нет смысла CGI и проч. WEB-приложения громоздить многопоточынми

смысл-то как раз есть, но не в данном случае


KSergey   (2007-12-13 15:47:00) [11]

нет смысла CGI и проч. WEB-приложения громоздить многопоточынми и вот почему: WEB-сервер по определению обрабатывает много одновременых запросов, т.е. сам и так использует многопоточность для организации ответов многим пользоватеям.
А вы еще и каждый раз начинаете сами плодить потоки, которые вообще-то ничего сами по себе не ускоряют, понятно.

Скорее тогда уж стоит устроить некий back-ground процесс, который будет эти индексы перестраивать периодически.
А то ка кринутся 10 (всего лишь) одновременных клиентов к такому скрипту - и все умрет на ожидании перестроения индексов, что, как было сказано - есть операция монопольная.


Anatoly Podgoretsky   (2007-12-13 15:32:00) [12]

> phantom  (13.12.2007 15:15:11)  [11]

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


Сергей М.   (2007-12-13 15:27:00) [13]


> По логике вещей должнобыть в полтора раза быстрее чем все
> последовательно делать


Нет, не должно.


phantom   (2007-12-13 15:15:00) [14]

Потока 3, два реиндексируют таблички(нормальные индексы подключить нельзя- Cliper вещь в себе) третий дожидается окончания и формирует страничку. По логике вещей должнобыть в полтора раза быстрее чем все последовательно делать.


Сергей М.   (2007-12-13 14:49:00) [15]


> поток должен проиндексировать табличку


В смысле дополднительный ?
А основной все это время чем будет занят ?


phantom   (2007-12-13 14:32:00) [16]

Спасибо огромное за разъяснение. Несколько потоков хочу сделать тк сервер многопроцессорный, а поток должен проиндексировать табличку и по моему мнению так будет быстрее.
TTable решил делать в RT , но я так понял если добавить в проект DataModule то можно и так сделать .


Palladin   (2007-12-13 12:40:00) [17]


> Сергей М. ©   (13.12.07 12:35) [7]

опыт, старый опыт :)

проверь :) да и зачем, вот кусок

procedure TWebApplication.CreateForm(InstanceClass: TComponentClass;
 var Reference);
begin
 // Support CreateForm for backward compatability with D3, D4, and
 // D5 web modules.  D6 generated web modules register a factory.
 if WebModuleClass = nil then
   WebModuleClass := InstanceClass
 else if WebModuleClass <> InstanceClass then
   raise Exception.CreateRes(@sOnlyOneDataModuleAllowed);
end;


Сергей М.   (2007-12-13 12:35:00) [18]


> Palladin ©   (13.12.07 12:29) [6]


> не важно, глобальная ссылка


С чего ты взял ?
Это только если заготовка проекта была сделана по станд.шаблону эксперта и не претерпела после этого изменений в части переноса ид-ра WebModule1 из раздела ид-ров глоб.переменных куда-либо еще


Palladin   (2007-12-13 12:29:00) [19]


> Сергей М. ©   (13.12.07 12:23) [5]

а не важно, глобальная ссылка

Var
WebModule1:TWebModule1

равна Nil

нужно искать другие пути, либо создавать TTable в RT, либо на TWebModule1.OnCreate сохранять Self вручную...


Сергей М.   (2007-12-13 12:23:00) [20]

Речь идет о standalone-приложении или о библиотеке ?
Поясни, зачем вообще нужна многопоточность ..

В какой момент создается объект, на который ссылается WebModule1 ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо