概念理解:闭包、协程、渐进式框架

闭包

闭包函数:声明在一个函数中的函数,叫做闭包函数。

闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。

function funA(){
  var a = 10;  // funA的活动对象之中;
  return function(){   //匿名函数的活动对象;
        alert(a);
  }
}
var b = funA();
b();  //10
package com.banmoon.test.closure;

import java.util.function.BiFunction;

public class Main {

    public static void main(String[] args) {
        sth((x, y) -> x + y);
        sth((x, y) -> x - y);
        sth((x, y) -> x * y);
        sth((x, y) -> x / y);
    }

    public static void sth(BiFunction<Integer, Integer, Object> function) {
        int x = 5;
        int y = 5;
        System.out.println(function.apply(x, y));
    }

}

协程

目前主流语言基本上都选择了多线程作为并发设施。

其实不管是进程还是线程,每次阻塞、切换都需要陷入系统调用(system call),先让CPU跑操作系统的调度程序,然后再由调度程序决定该跑哪一个进程(线程)。

协程是用户自己来编写调度逻辑的,对于我们的CPU来说,协程其实是单线程,所以CPU不用去考虑怎么调度、切换上下文,这就省去了CPU的切换开销,所以协程在一定程度上又好于多线程。

优点:

  • 无需系统内核的上下文切换,减小开销;
  • 无需原子操作锁定及同步的开销,不用担心资源共享的问题;
  • 单线程即可实现高并发,单核 CPU 即便支持上万的协程都不是问题,所以很适合用于高并发处理,尤其是在应用在网络爬虫中。

缺点:

协程的本质是个单线程,它不能同时用上单个 CPU 的多个核,协程需要和进程配合才能运行在多 CPU 上。

处处都要使用非阻塞代码。


渐进式框架

根据项目需求逐步引入和使用其功能的框架,而不需要一次性全部使用框架。常见的有:VUE、React、Angular。