|
|
  |
Структура функций, В чём преимущество ? |
|
|
|
May 7 2014, 16:39
|
Местный
  
Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778

|
Цитата(GetSmart @ May 7 2014, 14:53)  Драйвер устройства хранения вызывает функции файловой системы? Если да, то это будет callback. Даже если функция вызывается по статическому адресу. Или если вызывается синхронно, например fopen->fs_open_xxx->drv_read_blk->fs_alloc_blk. Главное, что вызов направлен в обратную строну, назад.
|
|
|
|
|
May 7 2014, 18:28
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(GetSmart @ May 7 2014, 19:17)  Как в жизни. "Перезвони(те) мне" = асинхронность + разговор за чужой счёт (чужой тред). Плюс нет 100% гарантии, что перезвонит  Понятие асинхронности не связано с понятием обратного вызова. Обратный вызов - это просто направление. Мне не нравится аналогия с телефоном, но если уж её применять, то это будет выглядеть так: - Вы звоните оператору сортировки (qsort company), и делаете заказ - отсортировать список гостей на свадьбу.
- При этом вы сообщаете ему номер жены для консультаций о порядке сортировки (compare). Трубку не кладёте, ждёте результата.
- Оператор в процессе сортировки перезванивает вашей жене другому номеру (compare) и уточняет (кого с кем посадить).
- По окончании сортировки оператор сообщает вам результат.
Это получается синхронный callback. То же самое, но вы кладёте трубку после заказа, а оператор перезванивает вам после выполнения - асинхронный. Добавлю, что понятие callback-функция появилось в программировании задолго до появления многозадачности и многопоточности. Цитата(A. Fig Lee @ May 7 2014, 19:30)  Кстати по поводу "qsort callback" Это как "шампанское" "Советское шампанское". Все называют. Хотя правильное определение шампанского, если спросить: Не болтайте ерундой. Это именно callback. Такова устоявшаяся терминология в данной отрасли (программирование).
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 7 2014, 19:16
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(ViKo @ May 8 2014, 00:37)  Переведите это на язык программы. Что значит "не кладете трубку" и что "кладете"? Очень просто. Если "не кладёте трубку" - все вызовы колбэков идут _до_ возврата из функции сортировки. Если "кладёте" - вызовы могут идти после возврата из функции сортировки. То есть, мы из main() вызвали qsort(), qsort в процессе работы много раз вызвал compare(), отсортировал, и только после этого вернул управление в main(). Здесь compare - синхронный callback. Второй вариант. Мы вызвали qsort_async(compare, done). Этот qsort вернул управление сразу, мы можем делать что-то другое. А qsort в это время работает, вызывает compare. Это уже асинхронные обратные вызовы. Ну и когда он отсортирует, он вызовет ф-ю done(). Такой callback называют completion routine.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 7 2014, 20:11
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(AHTOXA @ May 7 2014, 22:16)  Второй вариант. Мы вызвали qsort_async(compare, done). Этот qsort вернул управление сразу, мы можем делать что-то другое. А qsort в это время работает, вызывает compare. Это уже асинхронные обратные вызовы. Ну и когда он отсортирует, он вызовет ф-ю done(). Такой callback называют completion routine. Первый вариант - понятно. А второй - предполагает многозадачную или многопроцессорную систему? А, может, пускай они уже сами по себе работают - один проц сортирует, а другой... перемешивает  ? Ах, да, еще же прерывания есть...
|
|
|
|
|
May 7 2014, 22:16
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(AHTOXA @ May 7 2014, 14:16)  Очень просто. Если "не кладёте трубку" - все вызовы колбэков идут ... Никуда они не идут. Дозвонится не получится. Управление надо получить сначала Цитата(AHTOXA @ May 7 2014, 13:28)  Не болтайте ерундой. Это именно callback. Такова устоявшаяся терминология в данной отрасли (программирование). Нет. Не согласен.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 8 2014, 08:08
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(ViKo @ May 8 2014, 02:11)  Первый вариант - понятно. А второй - предполагает многозадачную или многопроцессорную систему? Да, естественно. Асинхронность подразумевает несколько потоков выполнения. Цитата(GetSmart @ May 8 2014, 08:40)  "Их" устоявшаяся терминология понятна. Как минимум два типа вызовов, принципиально непохожих. Но зачем-то обозванных одним обобщающим термином. Причём, кто-то и семафоры в эту "кучу" "притягивает" как способ возврата информации. Термин в принципе тоже понятен - обратный вызов из библиотеки. Вас постоянно сбивает аналогия с телефоном. Но между телефонным обратным вызовом и обратным вызовом функции есть принципиальная разница: телефонный обратный вызов обычно производится по тому же самому телефону, который инициировал вызов. В случае же с вызовом функции - вызывается другая функция, не та, что инициировала весь этот процесс. Поэтому представить синхронный колбэк по телефону сложнее (приходится приплетать жену  ).
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 10 2014, 14:40
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (AHTOXA @ May 8 2014, 01:28)  Понятие асинхронности не связано с понятием обратного вызова. Обратный вызов - это просто направление. Мне не нравится аналогия с телефоном, но если уж её применять, то это будет выглядеть так: - Вы звоните оператору сортировки (qsort company), и делаете заказ - отсортировать список гостей на свадьбу.
- При этом вы сообщаете ему номер жены для консультаций о порядке сортировки (compare). Трубку не кладёте, ждёте результата.
- Оператор в процессе сортировки перезванивает вашей жене другому номеру (compare) и уточняет (кого с кем посадить).
- По окончании сортировки оператор сообщает вам результат.
Это получается синхронный callback. То же самое, но вы кладёте трубку после заказа, а оператор перезванивает вам после выполнения - асинхронный. Добавлю, что понятие callback-функция появилось в программировании задолго до появления многозадачности и многопоточности. Не болтайте ерундой. Это именно callback. Такова устоявшаяся терминология в данной отрасли (программирование). Всё верно, ни убавить, ни добавить. За пример с телефоном и сортировкой отдельный респект.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|