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

Web/сайты Прочее

Был(а) онлайн: 26.04.20 14:45
Umen 26 лет

1.0 Был(а) онлайн: 26.04.20 14:45

Недавно
Входные данные:
• $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. Если зачинатель не может предпочесть строки то ВЫХОД.

Чтобы добавить заявку к этому заказу, нужно войти или зарегистрироваться

Мой блок

26.04.20 14:45
Umen 26