реклама на сайте
подробности

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> Структура функций, В чём преимущество ?
amaora
сообщение May 7 2014, 16:39
Сообщение #61


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Цитата(GetSmart @ May 7 2014, 14:53) *
Драйвер устройства хранения вызывает функции файловой системы?

Если да, то это будет callback. Даже если функция вызывается по статическому адресу. Или если вызывается синхронно, например fopen->fs_open_xxx->drv_read_blk->fs_alloc_blk. Главное, что вызов направлен в обратную строну, назад.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 7 2014, 18:28
Сообщение #62


фанат дивана
******

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



Цитата(GetSmart @ May 7 2014, 19:17) *
Как в жизни. "Перезвони(те) мне" = асинхронность + разговор за чужой счёт (чужой тред). Плюс нет 100% гарантии, что перезвонит sm.gif

Понятие асинхронности не связано с понятием обратного вызова. Обратный вызов - это просто направление.

Мне не нравится аналогия с телефоном, но если уж её применять, то это будет выглядеть так:
  • Вы звоните оператору сортировки (qsort company), и делаете заказ - отсортировать список гостей на свадьбу.
  • При этом вы сообщаете ему номер жены для консультаций о порядке сортировки (compare). Трубку не кладёте, ждёте результата.
  • Оператор в процессе сортировки перезванивает вашей жене другому номеру (compare) и уточняет (кого с кем посадить).
  • По окончании сортировки оператор сообщает вам результат.

Это получается синхронный callback. То же самое, но вы кладёте трубку после заказа, а оператор перезванивает вам после выполнения - асинхронный.

Добавлю, что понятие callback-функция появилось в программировании задолго до появления многозадачности и многопоточности.

Цитата(A. Fig Lee @ May 7 2014, 19:30) *
Кстати по поводу "qsort callback"
Это как "шампанское" "Советское шампанское".
Все называют. Хотя правильное определение шампанского, если спросить:


Не болтайте ерундой. Это именно callback. Такова устоявшаяся терминология в данной отрасли (программирование).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 7 2014, 18:37
Сообщение #63


Универсальный солдатик
******

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



Цитата(AHTOXA @ May 7 2014, 21:28) *
Это получается синхронный callback. То же самое, но вы кладёте трубку после заказа, а оператор перезванивает вам после выполнения - асинхронный.

Переведите это на язык программы. Что значит "не кладете трубку" и что "кладете"? Из основной функции вызвали функцию сортировки (а она уже там колбэк), и уже никто ничего не ждет. rolleyes.gif Сортировка отработает и вернется туда, откуда вызвали. Разница может быть в том, что сортировка вернет некий код, в зависимости от которого будут выполняться следующие действия, или не вернет ничего. Так?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 7 2014, 19:16
Сообщение #64


фанат дивана
******

Группа: Свой
Сообщений: 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.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 7 2014, 20:11
Сообщение #65


Универсальный солдатик
******

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



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

Первый вариант - понятно. А второй - предполагает многозадачную или многопроцессорную систему? А, может, пускай они уже сами по себе работают - один проц сортирует, а другой... перемешивает sm.gif ? Ах, да, еще же прерывания есть... w00t.gif
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 7 2014, 22:16
Сообщение #66


Знающий
****

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



Цитата(AHTOXA @ May 7 2014, 14:16) *
Очень просто. Если "не кладёте трубку" - все вызовы колбэков идут ...

Никуда они не идут. Дозвонится не получится.
Управление надо получить сначала

Цитата(AHTOXA @ May 7 2014, 13:28) *
Не болтайте ерундой. Это именно callback. Такова устоявшаяся терминология в данной отрасли (программирование).


Нет. Не согласен.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 8 2014, 02:40
Сообщение #67


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(AHTOXA @ May 8 2014, 00:28) *
Мне не нравится аналогия с телефоном, но если уж её применять, то это будет выглядеть так:
...
Это получается синхронный callback.

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

Из недостатков - синхронный ("за уши притянутый") неотличим от обычной функции-параметра. И не суть важно как иерархически они связаны. Но главный - конфликт синхронного с общепринятым в обиходе смыслом слова колбэк/перезвон. В жизни переадресацию перезвоном никто не называет из-за мешающего ключевого признака у понятия перезвон.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 8 2014, 08:08
Сообщение #68


фанат дивана
******

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



Цитата(ViKo @ May 8 2014, 02:11) *
Первый вариант - понятно. А второй - предполагает многозадачную или многопроцессорную систему?

Да, естественно. Асинхронность подразумевает несколько потоков выполнения.

Цитата(GetSmart @ May 8 2014, 08:40) *
"Их" устоявшаяся терминология понятна. Как минимум два типа вызовов, принципиально непохожих. Но зачем-то обозванных одним обобщающим термином. Причём, кто-то и семафоры в эту "кучу" "притягивает" как способ возврата информации.

Термин в принципе тоже понятен - обратный вызов из библиотеки. Вас постоянно сбивает аналогия с телефоном. Но между телефонным обратным вызовом и обратным вызовом функции есть принципиальная разница: телефонный обратный вызов обычно производится по тому же самому телефону, который инициировал вызов. В случае же с вызовом функции - вызывается другая функция, не та, что инициировала весь этот процесс. Поэтому представить синхронный колбэк по телефону сложнее (приходится приплетать женуsm.gif ).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
dxp
сообщение May 10 2014, 14:40
Сообщение #69


Adept
******

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



QUOTE (AHTOXA @ May 8 2014, 01:28) *
Понятие асинхронности не связано с понятием обратного вызова. Обратный вызов - это просто направление.

Мне не нравится аналогия с телефоном, но если уж её применять, то это будет выглядеть так:
  • Вы звоните оператору сортировки (qsort company), и делаете заказ - отсортировать список гостей на свадьбу.
  • При этом вы сообщаете ему номер жены для консультаций о порядке сортировки (compare). Трубку не кладёте, ждёте результата.
  • Оператор в процессе сортировки перезванивает вашей жене другому номеру (compare) и уточняет (кого с кем посадить).
  • По окончании сортировки оператор сообщает вам результат.

Это получается синхронный callback. То же самое, но вы кладёте трубку после заказа, а оператор перезванивает вам после выполнения - асинхронный.

Добавлю, что понятие callback-функция появилось в программировании задолго до появления многозадачности и многопоточности.



Не болтайте ерундой. Это именно callback. Такова устоявшаяся терминология в данной отрасли (программирование).

Всё верно, ни убавить, ни добавить. За пример с телефоном и сортировкой отдельный респект. sm.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

5 страниц V  « < 3 4 5
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.0145 секунд с 7
ELECTRONIX ©2004-2016