IO多路复用与回调函数

1 this指针

this指针

this关键字指向的是当前对象的引用

this 不是指向类。而是在实例化的时候与当前类的实例也就是对象,进行绑定。

关于回调

对于Python与JavaScript这种,能够直接传递“函数类型”的参数,C++也是可以传递函数指针和可调用对象,java能够传递对象引用进而调用对象内部的函数。回调函数可以作为另外一个函数的参数,进行传递。

关于回调函数的本质理解:当其他程序执行时,能够通过回调函数,执行调用者的代码,访问调用者传递进来的资源。但这里并没有转移控制权,而是保留控制权在当前的被调用者。可以把调用者与被调用者分开。调用者能够显式调用被调用者,同时被调用这能通过回调函数隐式调用调用者。

同步回调与异步回调

回调函数在同一个线程或进程内,是同步回调,调用者与被调用这的CPU控制权是串行的。回调函数的主要目的是业务逻辑的划分,降低调用者和被调用者,相互调用时的耦合程度。也就是说,不同的调用者,可以让被调者在某一阶段。

当回调函数与主调函数的执行不再同一个线程内,是异步回调,调用者与被调用者的CPU控制权是并行的。被调函数就可以通过回调函数完成后续的处理,而不需要中断主调函数。这也是actor设计模式的原则之一。

回调作用

那么问题来了,直接通过返回值的方式转移进程的控制权限不好吗。在回调的部分通过返回值,区分不同的情况,用户自己选择执行什么样的函数。

首先将程序简单地分为用户层和系统层。用户层就是程序员编写的代码,系统层就是程序语言提供的外部库、框架、工具等。

关于回调函数的本质理解:

回调函数在单线程的编程中也有一定的作用。在之前的疑问中,用户根据返回值调用不同的函数与系统调用回调函数与系统通过回调函数调用用户程序,后者,当回调程序执行完成后控制权依旧交给系统,不必考虑,系统在什么地方中断。在这里涉及一个关键的问题,到底是用户具有主动权还是系统具有主动权。在架构设计中有一个很关键的问题,系统应该提供大量的类、方法等工具,帮助用户实现一个完成的程序,还是系统应该实现主体的程序,在特定情况下调用用户的程序实现局部功能?

  • 编程框架与库的区别。比如jQuery就是编程库,它提供了功能,主体流程需要自己控制。springboot是编程框架,它提供了主体流程,用户只要实现少量的自定义模块,而不需要管理程序的一级一级调用过程。

  • 简单来说,用户只要通过少量的注解,就能将自己的类注册到spring框架当中,用户完成的知识其中的一笑部分补充代码。简单举例,假如我想要设计一个编程框架,这个框架是想要提供可以复用的功能,还是想完成主要的流程呢?