Шрифт:
Как мы сказали ранее, проблемы переносимости для функции
Во-вторых, проблема в том, как определить, успешно завершилось установление соединения или нет, если мы не можем считать возможность записи единственным указанием на успешное установление соединения. В Usenet предлагалось множество решений этой проблемы, которые заменяют наш вызов функции
1. Вызвать функцию
2. Вызвать функцию
3. Снова вызвать функцию
К сожалению, неблокируемая функция
Прерванная функция connect
Что происходит, если наш вызов функции
Все, что требуется сделать в этом сценарии, — вызвать функцию
16.5. Неблокируемая функция connect: веб-клиент
Первое практическое использование неблокируемой функции
Рис. 16.5. Установление множества параллельных соединений
В центре рисунка показан сценарий, при котором мы выполняем два параллельных соединения. В момент времени 0 запускаются первые два соединения, а когда первое из них устанавливается, мы запускаем третье. Общее время сократилось почти вдвое и равно 15, а не 29 единицам времени, но учтите, что это идеальный случай. Если параллельные соединения совместно используют общий канал связи (допустим, клиент использует модем для соединения с Интернетом), то каждое из этих соединений конкурирует с другими за обладание ограниченными ресурсами этого канала связи, и время установления каждого соединения может возрасти. Например, время 10 может дойти до 15, 15 — до 20, а время 4 может превратиться в 6. Тем не менее общее время будет равно 21 единице, то есть все равно меньше, чем в последовательном сценарии.