Управление потоками на PERL

Конюхоff18 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
03.11.2006

Входные данные:

• $user

• $pass

• $host

• $dbname – имя базы данных

• $table_name – имя таблицы с данными

• $threads – количество процессов

• $limit – количество копируемых строк в рабочую таблицу ($table_name_$ident_tmp)

• $ident – идентификатор сессии (если не установлен то равен Unix-time)

• переменные задаются ключами: (-u root –host localhost –limit 10 …)

1. скопировать данные из таблицы $table_name в $table_name_$ident

2. скопировать в таблицу $table_name_$ident_tmp заданное количество строк ($limit) из $table_name_$ident

3. запустить потоки + записать их id,pid и время запуска во временную таблицу $table_name_$ident_th (потоки сами прописывают себя)

Потоки:

а. выбрать строку данных из таблицы $table_name_$ident_tmp где status=”not fetch”

б. в таблице $table_name_$ident_tmp поставить status="in_progress" + taken_by=”id”

в. Вернуть массив данных (@row)

г. в таблице $table_name_$ident_tmp поставить status="fetched" для той строки что мы выбрали ранее

(обращаемся по id выбранной строки – т.е. по значению первого элемента + проверяем что именно этот процесс ранее выбирал эту строку

пример: update $table_name_$ident_tmp set status=’fetched’ where id=$row[0] and taken_by=$id)

5. Если потоку нечего делать то

а. он блокирует таблицу с информацией о потоках $table_name_$ident_th и убивает по значению pid всех кроме себя

б. делает апдейт таблицы $table_name_$ident по значению id-строки меняет статусы, время обращения и id-процесса.

в. Удаляет таблицу $table_name_$ident_tmp

г. Далее в П.1 или

6. Если инициатор не может выбрать строки то ВЫХОД.

Заявки фрилансеров