GOOGLE ADS

среда, 13 апреля 2022 г.

Пауза и возобновление темы

Скажем, у нас есть поток, обрабатывающий определенные инструкции и, следовательно, создающий промежуточные объекты результата, есть ли способ приостановить этот поток, а затем создать новый поток для возобновления с того места, где остановился предыдущий поток?

Произвольный пример:

Result result1 = foo();
Result result2 = fooAgain();
if(someCondition){
// save everything thats been computed so far and release this thread
}
Result result3 = notFoo();
// end of the method

// in a quartz scheduler or something
if(someCondition2){
// signal to resume the execution, but not from scratch instead from where its paused
}

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


Решение проблемы

Похоже, вы не должны ничего останавливать. Вместо этого используйте один набор потоков, создающих промежуточные результаты и сохраняющих их где-нибудь. Затем создайте еще один набор потоков, которые находят эти промежуточные результаты и делают с ними что угодно.

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

Эту настройку производитель-потребитель можно рассматривать как способ для потока возобновить задачу, начатую другим потоком. Промежуточный результат может включать информацию, указывающую, с какого шага необходимо начать выполнение задачи. Содержимое очереди может быть сохранено, чтобы его можно было восстановить после отключения системы и резервного копирования, чтобы можно было завершить ожидающие элементы.

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

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...