Оба заголовка, GCDAsyncSocket и AsyncSocket, утверждают, что они асинхронные, оба выглядят одинаково. Однако все, что касается сокетов, касается обработки одного непрерывного потока неограниченной длины, поступающего из пакетов данных TCP. Сначала я был немного смущен, подумав, что AsyncSocket совершает какое-то волшебство, делая пользовательские пакеты запросов и ответов и обрабатывая их для меня асинхронно (например, если я делаю запрос A, B, C, тогда ответ от сервера может прийти в другой порядок, например B, C, A). Немного покопавшись в мире сокетов, я понял, что данные, поступающие как с сервера (через чтение сокетов), очень синхронны, а не асинхронны. Все дело в чтении одного потока, разрезании его на пакеты и выполнении обратных вызовов в мой класс делегата, и если я делаю запросы A, B, C, то ответы от сервера будут приходить в том же порядке A, B, C. AFAIK, AsyncSocket использует основной цикл выполнения, поэтому он снова использует основной поток, основную очередь. Итак, что же это за асинхронность?