Даже после чтения http://krondo.com/?p=1209 или Does an asynchronous call always create/call a new thread? Я все еще смущен тем, как обеспечить асинхронные вызовы по однопоточной системе. Я объясню свое понимание и покажу свои сомнения.Асинхронная обработка с одной нитью
Один из примеров, которые я читал, описывал TCP-сервер, обеспечивающий асинхронную обработку запросов - пользователь вызывал бы метод, например. get(Callback c)
, и обратный вызов будет вызван через некоторое время. Теперь, моя первая проблема здесь - у нас уже есть две системы, один сервер и один клиент. Это не то, что я имею в виду, потому что на самом деле у нас есть по крайней мере два потока - один на сервере и один на стороне клиента.
Другим примером, который я прочитал, был JavaScript, так как это самый яркий пример однопоточной асинхронной системы с Node.js
. То, что я не могу получить мой голова, может быть, мышления в Java терминах, заключается в следующем: если я выполнить код ниже (извинения за некорректный, вероятно, зверской синтаксис):
function foo(){
read_file(FIle location, Callback c) //asynchronous call, does not block
//do many things more here, potentially for hours
}
вызова для чтения Выполняет файл (СТГ) и возвращает, позволяя остальной части моей функции выполнить. Поскольку существует только один поток, то есть тот, который выполняет мою функцию, как на земле один и тот же поток (тот и тот, который выполняет мои вещи) когда-либо будет читать в байтах с диска?
В общем, мне кажется, что мне не хватает какого-либо базового механизма, который действует как планировщик с круговым движением, который по сути является однопоточным и может разбивать задачи на более мелкие или называть многоточечные компоненты, которые создайте поток и прочитайте файл.
Заранее благодарим всех за комментарии и указываем на мои ошибки по дороге.
Обновление: Благодарим за сообщение. Другие хорошие источники, которые помогли мне с этим здесь:
- http://www.html5rocks.com/en/tutorials/async/deferred/
- http://lostechies.com/johnteague/2012/11/30/node-js-must-know-concepts-asynchrounous/
- http://www.interact-sw.co.uk/iangblog/2004/09/23/threadless (.NET)
- http://ejohn.org/blog/how-javascript-timers-work/ (встроенные функции таймеров)
- http://www.mobl-lang.org/283/reducing-the-pain-synchronous-asynchronous-programming/
Там может быть или не может быть фоновый поток неявно запускается в ожидании операции, но это совершенно непрозрачны и не имеет отношения к вашему коду JavaScript, который начал сам операцию. Основной цикл цикла потока JavaScript в веб-браузере (или NodeJS, FTM) является однопоточным. – Noseratio