了解Java中的异步编程

时间:2018-11-16 11:46:12

标签: java multithreading asynchronous parallel-processing

基于我的理解,异步编程通过在单个线程上同时执行多个任务,然后在任务完成时通知调用线程来工作,我无法理解单个线程如何可以同时执行多个任务和异步之间有什么区别编程和多线程。

2 个答案:

答案 0 :(得分:1)

通过异步编程,一个线程可以管理多个资源,这些资源正在执行并发操作,例如它可能正在等待一个或多个网络连接作出响应,可能正在等待磁盘操作,可能正在等待其他线程执行操作。

  

异步。编程和多线程

使用多线程时,您有多个线程都作为对等体同时执行多个任务。

对于异步编程,您有一个线程启动要由其他线程(可能在其他计算机上)执行的作业,并在完成后执行其他操作。即所有协调都是通过一个线程完成的。它的开发类似于单线程进程,但仍然受益于多个CPU。

答案 1 :(得分:0)

多线程和异步编程都是并行编程的一种。在多线程中,最小部分(顺序的并且不包含并行部分)是线程。 在异步编程中,最小的部分是异步过程调用(ACP)。

每个线程都有自己的调用堆栈,该堆栈占用大量内存(0.5..1.0 MB)。结果,每个进程的实际限制约为10000个线程。

ACP没有自己的调用堆栈,它在从某个线程池借来的线程上执行。当ACP等待输入数据时,它不使用任何线程,因此消耗的内存相对较少,并且在同一进程中我们可以拥有数百万个ACP。 但是异步编程比多线程编程更棘手,并且陷阱更多。

“在单个线程上同时执行多个任务”-不。用户线程可以产生许多ACP,它们将并行执行,但是要在某些线程池的工作线程(可以包括原始线程)上执行。每个工作线程都按顺序依次执行异步任务。