Как объяснить маме блокирующие и неблокирующие функции - PullRequest
0 голосов
/ 08 октября 2018

У меня возникли проблемы с объяснением концепции блокировки против неблокирующей функции для моей мамы.Как лучше всего это объяснить?Есть ли хорошая аналогия для использования?

Я не знаю, нужно ли вам это знать, но мы используем Modkit для Vex IQ, язык программирования, очень похожий на Scratch.mit.edu.

Большое спасибо!

1 Ответ

0 голосов
/ 08 октября 2018

Вы красите комнату.У вас кончились краски, поэтому вы отправляете своего ребенка в магазин, чтобы купить больше краски, и ждете, пока они вернутся.Вы блокируете, когда краска становится доступной.Функция fetch_more_paint() является «заданием» и блокируется, так как вы не можете больше ничего делать во время работы функции.Однажды начатый, он вступает во владение, пока это не заканчивается.

Вы красите комнату, планируете покрасить другую комнату в ближайшее время.У тебя кончилась краска.Вы говорите ребенку пойти в магазин, чтобы получить больше краски.Затем вы начинаете готовить следующую комнату для рисования, пока у вас нет краски.Когда ребенок возвращается с краской, вы возобновляете рисование первой комнаты.Вы не блокируете доступность краски: fetch_more_paint() является запросом, а не работой: он не блокирует.После оформления запроса вы можете продолжать делать все, что вам нужно.

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

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

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

...