大家好,今天小编关注到一个比较有意思的话题,就是关于驱动软件开发的问题,于是小编就整理了1个相关介绍驱动软件开发的解答,让我们一起看看吧。
事件驱动和请求响应模式有什么区别?
这两个是不同层次的东西,不合适比较优劣。操作系统对设备进行抽象后,就分成块设备和流设备,都可以由中断来处理相应的IO事件。一般操作系统为了降低上下文切换开销,尽量将IO事件绑定到一个CPU进行处理。典型的事件处理框架如poll,epoll等,大多在内核做优化,内部实现无阻塞,尽量利用DMA,减少内存拷贝,提高效率。对用户提供同步或异步调用接口。epoll做更深入优化,对异步调用进一步提供水平触发或边缘触发的支持,以减少用户调用次数。这种编程模式主要由事件启动模型。
很多流式协议如tcp、http等协议,它们的codec实际是做在无阻塞异步事件驱动之上的。像http协议,本质上是请求响应协议。在解析请求时,需要上层应用对此进行处理。这时框架需要考量的是提供同步回调接口还或是异步回调接口给用户。这和用户的线程管理策略也很有关系。如果提供同步回调,用户单线程可以处理请求,可以调用阻塞IO接口操纵数据。但这种处理方式效率较低,一般扩展性不好。通讯框架半同步半异步,指的就是这种类型。链接建立,底层协议解析采用异步方式,然后转化成同步回调接口给用户。大部分的http服务器是这种实现。
另一种方式,称为主动全异步模式。用户必须采用非阻塞系统调用,任何阻塞调用都会是灾难。用户得自己处理数据是否足够进行下一步协议解析或请求处理。当数据不充分时,bookmark当前处理状态,并切换到下个有数据事件发生的请求进行处理。这个处理线程能处理多个甚至全部请求,基本都处于忙碌状态而无需进行线程切换或挂起。少部分需要极高性能的http服务器,采用主动全异步方式,对于应用端开发异步应用能力的要求也会很高。
到此,以上就是小编对于驱动软件开发的问题就介绍到这了,希望介绍关于驱动软件开发的1点解答对大家有用。