Блокировка операций ввода-вывода в одноядерном компьютере - PullRequest
1 голос
/ 03 июня 2019

Я пытаюсь понять, что происходит с потоком, когда он ожидает ответа http от удаленного сервера.

Допустим, в один момент времени запущено n процессов.ОС, основанная на алгоритме планирования потоков, будет пытаться запустить каждый поток (скажем, по принципу циклического перебора).Допустим, один поток из n инициировал запрос http и ожидает ответа от удаленного сервера.Будет ли этот поток продолжать получать на ядре процессора?или есть какой-то механизм interrupt , который уведомит поток, если он будет готов к запуску?Если присутствует механизм прерывания, то в чем преимущество использования асинхронного программирования ?по крайней мере, с точки зрения использования ЦП.

Зависит ли вышеупомянутая вещь от языка?Если да, в чем разница между java и nodejs против python ...

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Я пытаюсь понять, что происходит с потоком, когда он ожидает ответа http от удаленного сервера.

Что ж, поток будет ожидать получения основного сокета TCPданные.HTTP - это протокол высокого уровня, который использует блокирующее / неблокирующее TCP-соединение.сам по себе поток ожидает не «HTTP-ответа», а скорее каких-то доступных данных для сокета для чтения.

Будет ли этот поток продолжать получать доступ к ядру процессора?

Если поток ожидает чтения TCP-сокета, ОС не планирует запуск этого потока до тех пор, пока не будут получены некоторые данные.затем ОС запланирует запуск потока в какой-то момент в будущем.заблокированный поток никогда не запускается по расписанию - операционная система не видит причин для этого, учитывая тот факт, что поток не имеет ничего общего.

Зависит ли вышеуказанная вещь от языка?Если да, то в чем разница между Java и nodejs против Python ...

Нет.Каждая ОС предоставляет API C / C ++ для использования приложением.Windows предоставляет Win32, а Linux - POSIX.каждый язык программирования оборачивает и связывает эти API, и каждый вызов «высокого уровня» (например, подключение сокета) будет в конечном итоге вызывать API операционной системы.

0 голосов
/ 03 июня 2019

Насколько я понимаю, асинхронное ключевое слово используется для продолжения выполнения вашей программы вместо ожидания завершения разветвленного процесса, даже в одноядерных процессорах, как это было в случае с ранними компьютерами, которые мы могли использовать в многозадачном режиме, поэтому это можно вывести что выделение ресурсов было выполнено процессором cpu, при этом стараясь быть максимально разумным, поэтому использование async позволяет вашему потоку выполнения выполняться без ожидания завершения задачи блокировки, в противном случае, даже если cpu по очереди выполнит поток, но так как ваша программа является одним потоком, она будет блокироваться.

...