В чем разница между асинхронным вводом-выводом и асинхронной функцией?
Node.js, является асинхронным вводом-выводом. что это означает?
Разница между тем, что я создаю функцию async, создавая другой поток, чтобы выполнить этот процесс?
например.
void asyncfuntion(){
Thread apple = new Thread(){
public void run(){
...do stuff
}
}
apple.start()
}
Если есть разница, могу ли я сделать асинхронный ввод-вывод в javascript?
Ответы
Ответ 1
Асинхронный ввод-вывод
Асинхронный ввод-вывод (из Википедии)
Асинхронный ввод-вывод или неблокирующий ввод-вывод - это форма ввода/вывода обработки, которая позволяет продолжить обработку до передача завершена.
Это означает, что если процесс хочет выполнить read()
или write()
, в синхронном вызове процесс должен будет дождаться завершения аппаратного завершения физического ввода-вывода, чтобы он мог быть проинформирован о успех/сбой операции ввода-вывода.
В асинхронном режиме, когда процесс выдает асинхронный ввод/вывод ввода/вывода, системные вызовы возвращаются сразу же после того, как I/O был передан на аппаратное обеспечение или поставлен в очередь в OS/VM. Таким образом, выполнение процесса не блокируется (поэтому его называют неблокирующим вводом-выводом), так как ему не нужно ждать результата от системного вызова, он получит результат позже.
Асинхронная функция
Асинхронные функции - это функция, возвращающая данные обратно вызывающему с помощью обработчика событий (или функций обратного вызова). Функция обратного вызова может быть вызвана в любое время (в зависимости от того, сколько времени потребуется для завершения асинхронной функции). Это не похоже на синхронную функцию, которая будет выполнять свои инструкции перед возвратом значения.
... могу ли я сделать асинхронный ввод-вывод в java?
Да, Java NIO обеспечивает неблокирующую поддержку ввода-вывода через Selector. Кроме того, Apache MINA - это сетевая инфраструктура, которая также включает в себя неблокирующий ввод-вывод. На этот вопрос отвечает соответствующий вопрос fooobar.com/questions/85888/....
Ответ 2
Есть несколько замечательных статей, касающихся асинхронного кода в node.js:
Ответ 3
В дополнение к ответу @The Elite Gentleman, node не создает потоков для асинхронных функций ввода-вывода. Все под node работает в цепочке событий с одним потоком. Вот почему очень важно избегать синхронных версий некоторых функций ввода/вывода, если это абсолютно необходимо, например fs.readSync
Вы можете прочитать это превосходное сообщение в блоге для некоторой проницательности: http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
Ответ 4
Я изучал тот же вопрос, поскольку этот асинхронный IO-шаблон был для меня совершенно новым. Я нашел этот разговор на infoq.com, который сделал меня очень счастливым. Парень очень хорошо объясняет, где находится асинхронный IO (ОС → ядро) и как он встроен в node.js в качестве основной идиомы для ввода IO. Наслаждайтесь!
http://www.infoq.com/presentations/Nodejs-Asynchronous-IO-for-Fun-and-Profit
Ответ 5
node.js позволяет программисту выполнять асинхронный ввод-вывод, заставляя использовать обратные вызовы. Теперь обратные вызовы похожи на старые асинхронные функции, которые мы долгое время использовали для обработки событий DOM в javascript!
например
asyncIOReadFile(fileName, asynFuncReadTheActualContentsAndDoSomethingWithThem);
console.log('IDontKnowWhatIsThereInTheFileYet')
function asynFuncReadTheActualContentsAndDoSomethingWithThem(fileContents) {
console.log('Now I know The File Contents' + fileContents)
}
//Generally the output of the above program will be following
'IDontKnowWhatIsThereInTheFileYet'
//after quite a bit of time
'Now I know The File Contents somebinarystuff'
Ответ 6
От https://en.wikipedia.org/wiki/Asynchronous_I/O
Синхронная блокировка ввода/вывода
Простым подходом к I/O было бы начать доступ, а затем дождаться его завершения.
Блокирует прогресс программы во время сеанса связи, оставляя системные ресурсы незанятыми.
Асинхронный ввод/вывод
В качестве альтернативы можно запустить связь, а затем выполнить обработку, которая не требует завершения ввода-вывода.
Любая задача, которая зависит от завершенного ввода-вывода... все еще должна ждать завершения операции ввода-вывода и, тем самым, заблокирована,
но другая обработка, которая не имеет зависимости от операции ввода-вывода, может продолжаться.
Пример:
https://en.wikipedia.org/wiki/Node.js
Node.js имеет управляемую событиями архитектуру , способную к асинхронному вводу/выводу