Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Checker должен сам создавать потоки для чтения #15

Open
lirik90 opened this issue Jul 30, 2021 · 0 comments
Assignees
Labels
enhancement New feature or request

Comments

@lirik90
Copy link
Member

lirik90 commented Jul 30, 2021

При чтении каждого устройства, в цикле мы отправляем устройство в заранее созданный поток для вызова в нём check и ждём результата 100мс (задаётся в конфиге), если время истекло, то оставляем его в этом потоке и переходим к следующему устройству, в списке читающих потоков ищем не занятый и если такого нет, то создаём ещё один и история повторяется, передаём на чтение и ждём недолго. В читающем потоке должен быть механизм проверки занят ли он или нет, а так же механизм прерывания задания (возможно просто из основного потока вызываем stop, ждём 50мс и прерываем поток принудительно). После обхода всех устройств, проверяем нет ли простаивающих потоков и если есть, то завершаем их (возможно если простой больше N мс), но оставляем хотя бы один. Возможно стоить выставлять устройствам рейтинг, если он один раз слишком долго читал, то помечать его и не ждать окончания чтения в следующий раз, а в потоке чтения предусмотреть callback и если вдруг он прочитается очень быстро, то тогда снимать с него эту отметку, для ожидания в следующий раз. Нужно предусмотреть блокировки, чтобы два потока не могли одновременно обратиться к одному плагину, если только функция is_multithread_call_accepted не возвращает true.

@lirik90 lirik90 added the enhancement New feature or request label Jul 30, 2021
@lirik90 lirik90 self-assigned this Jul 30, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant