Понимание асинхронного программирования в Java - PullRequest
0 голосов
/ 16 ноября 2018

Основываясь на моем понимании, асинхронное программирование работает, выполняя более одной задачи одновременно в одном потоке, а затем вызывающий поток получает уведомление, когда задача завершена, я просто не могу понять, как один поток может выполнить более одной задачи одновременнои в чем разница между Async.Программирование и многопоточность.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Как многопоточность, так и асинхронное программирование являются разновидностями параллельного программирования. В многопоточности минимальная часть (которая является последовательной и не содержит параллельных частей) является потоком. В асинхронном программировании минимальная часть - это асинхронный вызов процедуры (ACP).

Каждый поток имеет свой собственный стек вызовов, который потребляет значительный объем памяти (0,5 ... 1,0 МБ). В результате практический предел составляет около 10000 потоков на процесс.

У ACP нет собственного стека вызовов, он выполняется в потоке, заимствованном из некоторого пула потоков. Когда ACP ожидает входные данные, он не использует какой-либо поток и поэтому потребляет относительно небольшой объем памяти, и мы можем иметь миллионы ACP в одном процессе. Но асинхронное программирование сложнее, чем многопоточное, и имеет больше ловушек.

«выполнение более одной задачи одновременно в одном потоке» - нет. Поток пользователя может порождать множество ACP, и они будут выполняться параллельно, но в рабочих потоках некоторого пула потоков (который может включать в себя исходный поток). Каждый рабочий поток выполняет асинхронные задачи последовательно, одна за другой.

0 голосов
/ 16 ноября 2018

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

Асинхронный. Программирование и многопоточность

Благодаря многопоточности у вас есть несколько потоков, работающих как одноранговые, для одновременного выполнения нескольких задач.

При асинхронном программировании у вас есть один поток, который запускает задания, выполняемые другими потоками (возможно, на других машинах), а когда они заканчиваются, выполняет другие действия. т.е. все согласование осуществляется через один поток. Это должно быть разработано скорее как однопоточный процесс, но все же выиграть от нескольких процессоров.

...