nothingistrue
2023-10-09 14:02:59 +08:00
六,响应式编程,对应的编程概念是「流」,现实概念有个跟起非常像的,「流水线」。如果要搞这个,首先要把「流」搞清楚。Java8 的 Stream 可以用来入门。Kettle 、Spring Batch 可以用来练手。你最起码是 kettle 或者 Spring Batch (高级流应用,不能是一个处理器转发然后又回到普通代码去处理了) 用得比较熟悉了,才能去接触响应式编程。另外,你也可以直接从函数式编程、数据流,这些数学理论入手,不过前提是要先清空 C 、C++、Java 等全部常规编程习惯。
一到五跑题了,留着备用看吧。
一,同异步跟是否阻塞,不是一词两用,而是有关联的两个概念。
二,阻塞针对的不是当前过程,而是使用同一资源的多个过程之间的协作方式。通常都是 IO 比计算慢,故常见的阻塞是针对 IO 的阻塞。一个 IO 通道,如果只允许同时最多一个过程使用它,在该过程使用它期间其他过程只能等,那么这就是阻塞的。如果允许同时多个过程使用它,那么这是非阻塞的。
三,同步异步,针对的是调用者和被调用者之间的协作过程。如果被调用者不做完就不回复,同时调用者还一直等着它,那么这是同步的。如果被调用者没处理完就提前做个特殊回复,同时调用者认可这种特殊回复,那么这是异步调用。如果调用者这收到异步特殊回复之后,又再继续等待这个特殊回复转换成完整回复,那么这是异步之后的回转同步,或者,整体上来说,这还是同步调用。
四,再往外看调用者、非调用者的宿主程序,这时候同异步跟阻塞有了关联。如果把调用者宿主程序认为资源,调用关系——被调用者的执行行为认为处理过程,那么同步调用是阻塞的,异步调用是非阻塞的。
五,同步还是异步,技术上由被调用者决定,但业务上由有调用者决定。如果调用者实时关心回复结果,那么它永远要是同步调用,即使被调用者技术上异步,最终也要通过异步转回同步来变成同步。异步编程中,如何异步从来都不是关键,如何异步转会同步,获取去掉不必要的业务同步,才是关键。