DMA为什么比轮询、中断方式性能要卓越非常多?(你不懂)

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/35735397

假设是计算机专业出身的同学,都听过一个概念,中断比轮询要好、DMA比中断要好。

中断比轮询要好,是easy理解的:

在轮询中,CPU是死循环运行对IOport的检測,这样的模式,大量的浪费了CPU(由于CPU除了处理外设之外,很多其它的时间应该用于对内存的操作,如计算等)。

而中断方式,则没有死循环的浪费,CPU能够正常做别的事情,等到外部设备数据来了,就会主动由设备控制器发出中断(设备控制器预先须要注冊相应的中断控制号)

可是,为什么DMA比中断要好呢?

嘿嘿。不幸的是,这个问题本身就是错的。oh my god!

DMA和中断不是同一个层级的概念。DMA本身也会用到中断。

DMA之所以比中断快,是由于,在DMA机制下,进行外设读写操作的指令是由DMA控制器完毕,而不是由主机的CPU完毕!

DMA方式下,中断已经成为了,DMA開始或完毕的一个通知信号(读写指令由DMA控制器完毕)。而在“纯中断”模式下,中断是启动主机CPU開始外设读写的信号(读写指令out_p(),in_p()由主机CPU运行)!

明确了吧?

还不明确加我qq号吧:129三865272,注明linux。

时间: 2024-09-30 05:34:00

DMA为什么比轮询、中断方式性能要卓越非常多?(你不懂)的相关文章

DMA为什么比轮询、中断方式性能要卓越很多?(你不懂)

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/35735397 如果是计算机专业出身的同学,都听过一个概念,中断比轮询要好.DMA比中断要好. 中断比轮询要好,是容易理解的: 在轮询中,CPU是死循环执行对IO端口的检测,这种模式,大量的浪费了CPU(因为CPU除了处理外设之外,更多的时间应该用于对内存的操作,如计算等). 而中断方式,则没有死循环的浪费,CPU可以正常做别的事情,等到外部设备数据来

java用while循环设计轮询线程的性能问题

java用while循环设计轮询线程的性能问题 轮询线程在开发过程中的应用是比较广泛的,在这我模拟一个场景,有一个队列和轮询线程,主线程往队列中入队消息,轮询线程循环从队列中读取消息并打印消息内容.有点类似Android中Handler发送消息. 首先定义一个Message类. public class Message { private String content; public Message(String content) { this.content=content; } public

服务器推Comet长轮询的方式与普通AJAX不断请求的方式的区别

当我们想要在浏览器实时显示某些数据,如何实现? 实现的方式有多种,最简单的既是设置一个间隔,AJAX不断发送请求,这种方式最明显的缺陷不管有没有新数据都会一直发送请求,而且这个间隔如果设置的长,及时性太差,如果间隔设置的短,每个客户端都在不断发送大量请求,影响服务器性能 还有一种是利用服务器推的技术,基于长轮询的方式,如图所示: 一开始会觉得,这个也是在不断的请求服务器端,和普通AJAX不断请求有什么区别?这是还未了解长轮询的流程.深入研究了下,发现区别很大 长轮询大致流程为: 客户端通过AJA

STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信.但在实际项目中作为I2C从机的应用相对要少的多,本文主要讲述关于[STM32F10x_硬件I2C主从通信]中STM32作为从机的例子. 在学习本问内容之前,如果对I2C协议还不太了解的朋友请先去了解一下I2C协议,或看我之前关于I2C通信的文章(我微信公众号和博客都有). 关于STM32硬件I2C作

S5PV210 串口设置与实验(轮询方式)

S5PV210 UART 相关说明 通用异步收发器简称 UART, 即 UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来传输串行数据.发送数据时, CPU 将并行数据写入 UART,UART 按照一定的格式在一根电线上串行发出:接收数据时, UART 检测另一根电线的信号,将串行收集在缓冲区中, CPU 即可读取 UART 获得这些数据. 在 S5PV210 中, UART 提供了 4 对独立的异步串口 I/O 端口,有 4 个独立的通道,每

多线程10--线程间实时通信--耗性能的轮询

1. 1 public class ListAdd2 { 2 private volatile static List list = new ArrayList(); 3 4 public void add(){ 5 list.add("hello"); 6 } 7 8 public int size(){ 9 return list.size(); 10 } 11 12 public static void main(String[] args) { 13 final ListAdd

Web 通信 之 长连接、长轮询(long polling)(转载)

基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与WebIM.ChatRoom和一些需要及时交互的网站应用中.其真实案例有:WebQQ

Web 通信 之 长连接、长轮询(long polling)

基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与WebIM.ChatRoom和一些需要及时交互的网站应用中.其真实案例有:WebQQ

Web 通信 之 长连接、长轮询(转)

Web 通信 之 长连接.长轮询(long polling) 基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的"不停"其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与W