У меня есть поток, который запускает цикл, и в этом цикле он использует apache common http client
для создания соединения с удаленным сервером и ПОЛУЧАЕТ некоторые данные с него, а затем некоторое время спит. Мой вопрос заключается в том, что если сеть работает медленно, может ли ЦП запустить choaking
, так как метод GET займет больше времени для получения данных и, следовательно, возврата.
Может ли HTTP-клиент Java перегружать ЦП, если сеть работает медленно
Ответы (3)
Я не думаю, что это вызовет высокую нагрузку на ЦП, но ваш поток может заблокироваться на долгое время во время GET, что может привести к тому, что ваша программа будет выглядеть медленно. GET должен ожидать ввода-вывода, если сеть работает медленно, что обычно не требует много ресурсов ЦП.
Сеть — это операция ввода-вывода, обычно она выполняется периферийными устройствами, поэтому ЦП просто ждет завершения операций. Операционная система блокирует выполнение потока до завершения операции ввода-вывода. См. жизненный цикл потоков, он имеет особое состояние «заблокирован для ввода-вывода».
нет, процессор не застрянет, а приложение застрянет (даже если у вас отдельный сетевой поток)
а поскольку сетевые операции являются операциями ввода-вывода, они не используют ЦП. поэтому в этой заблокированной продолжительности вашего потока процессорное время не будет выделено этому заблокированному потоку.