2015-04-18 3 views
0

Я знаю, что когда я работаю с сокетами или файлами, я могу установить его для неблокирования и использовать epoll, например, для создания асинхронного сервера, но я сомневаюсь, что у меня нет файлового дескриптора, такого как происходит с розетками, например, представить запрос в базе данных, как я могу сделать запрос без заблокировать мой поток, и передать функцию обратного вызова, как происходит на Node.jsРеализовать async-функцию в C

, например:

queryDB("select something from mytable", my_callback); 

и queryDB немедленно возвращается.

Мое сомнение в том, как я могу сделать эту функцию queryDB с таким поведением.

+0

Если API только блокирует, вы можете запустить другой поток для выполнения вызова. В зависимости от того, что должен сделать обратный вызов, и в каком потоке он должен работать, все может оказаться сложным. – Diego

+0

На самом деле я хотел бы избежать потоков, я хотел бы сделать что-то вроде функции чтения, например, я хотел бы поставить задачу на O.S и после получения ответа epoll. – Alex

ответ

1

Синхронные интерфейсы не могут использоваться асинхронно, не вводя отдельный стек вызовов. Btw, OS - ваш поток ввода/вывода.

Запустите один поток, поп-запросы от атомной очереди, сообщите об их завершении.

Смежные вопросы