В чем разница между асинхронным вводом-выводом и асинхронной функцией?

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/....

Ответ 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 имеет управляемую событиями архитектуру , способную к асинхронному вводу/выводу