我从这篇非常好的文章中读到了编程的线程模型与异步模型.http://krondo.com/blog/?p=1209
但是,文章提到了以下几点.
我记得通过在Ready-Queue和Waiting-Queue(以及其他队列之间)之间移动TCB来读取线程由操作系统管理.在这种情况下,线程不会浪费时间等待它们吗?
鉴于上述情况,异步程序相对于线程程序有什么优势?
dor*_*ron 67
Lak*_*thi 12
假设您有 2 个任务,它们不涉及任何 IO(在多处理器机器上)。在这种情况下,线程优于异步。因为 Async 就像单线程程序一样按顺序执行您的任务。但是线程可以同时执行这两个任务。
假设您有 2 个任务,涉及 IO(在多处理器机器上)。在这种情况下,异步和线程执行或多或少相同(性能可能因内核数量、调度、任务的进程密集程度等而异)。此外,异步占用更少的资源、低开销并且在多线程程序上编程更简单。
这个怎么运作?线程1执行任务1,由于正在等待IO,所以移到IO等待队列。同样线程2执行任务2,由于也涉及到IO,所以移到IO等待队列。一旦它的 IO 请求得到解决,它就会被移动到就绪队列,以便调度程序可以安排线程执行。
异步执行任务 1 并且不等待它的 IO 完成它继续执行任务 2 然后它等待两个任务的 IO 完成。它按照IO完成的顺序完成任务。
异步最适合涉及 Web 服务调用、数据库查询调用等的任务,线程用于处理密集型任务。
下面的视频解释了Async vs Threaded model
以及何时使用等,
https://www.youtube.com/watch?v=kdzL3r-yJZY
希望这是有帮助的。
Aid*_*len 10
有两种方法可以创建线程:
同步线程 - 父级创建一个(或多个)子线程,然后必须等待每个子级终止.同步线程通常称为fork-join模型.
异步线程 - 父和子并发/独立运行.多线程服务器通常遵循此模型.
资源 - http://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/0470128720
首先,请注意线程是如何实现和调度的很多细节都是特定于操作系统的。通常,您不必担心线程相互等待,因为操作系统和硬件会尝试安排它们高效运行,无论是在单处理器系统上异步运行还是在多处理器系统上并行运行。
一旦线程完成等待某事,比如 I/O,就可以认为它是可运行的。可运行的线程将很快被安排在某个时间点执行。无论这是作为一个简单的队列还是更复杂的东西来实现,同样是特定于操作系统和硬件的。您可以将阻塞线程集视为一个集合,而不是一个严格有序的队列。
请注意,在单处理器系统上,此处定义的异步程序等效于线程程序。
归档时间: |
|
查看次数: |
45258 次 |
最近记录: |