Есть несколько кратких упоминаний об асинхронных моделях, но никто на самом деле не объяснил это, поэтому я подумал, что стоит принять в них участие. Наиболее распространенный метод, который я видел в качестве альтернативы многопоточности - это асинхронные архитектуры. Все, что на самом деле означает, что вместо того, чтобы выполнять код последовательно в одном потоке, вы используете метод опроса, чтобы инициировать некоторые функции, а затем возвращаться и периодически проверять, пока не станут доступны данные.
Это действительно работает только в моделях, таких как ваш вышеупомянутый сканер, где реальным узким местом является ввод-вывод, а не процессор. В общих чертах асинхронный подход инициирует загрузку на нескольких сокетах, и цикл опроса периодически проверяет, закончили ли они загрузку, и когда это будет сделано, мы можем перейти к следующему шагу. Это позволяет запустить несколько загрузок, ожидающих в сети, путем переключения контекста в том же потоке, как это было раньше.
Многопоточная модель будет работать почти так же, за исключением использования отдельного потока, а не цикла опроса, проверяющего несколько сокетов в одном потоке. В приложении, связанном с вводом / выводом, асинхронный опрос работает почти так же, как и многопоточность, для многих случаев использования, поскольку реальная проблема заключается в простом ожидании завершения ввода / вывода и не столько в ожидании, пока процессор обработает данные.
Другой пример из реальной жизни - система, которая должна была выполнить ряд других исполняемых файлов и ожидать результатов. Это может быть сделано в потоках, но также значительно проще и почти так же эффективно просто запустить несколько внешних приложений, как объекты Process, а затем периодически проверять, пока все они не завершат выполнение. Это помещает части с интенсивным использованием ЦП (исполняемый код во внешние исполняемые файлы) в свои собственные процессы, но обработка данных обрабатывается асинхронно.
lib ftp-сервер Python, над которым я работаю, pyftpdlib использует асинхронную библиотеку Python для обработки обслуживающих клиентов FTP только с одним потоком и асинхронного обмена сокетами для передачи файлов и команды / ответа.
См. Для дальнейшего чтения страницу библиотеки Python Twisted на Асинхронное программирование - хотя это и несколько специфично для использования Twisted, оно также вводит асинхронное программирование с точки зрения новичка.