当一个线程暂停而另一个线程启动时,操作系统必须执行上下文切换。这意味着,除其他外,必须保存 CPU 寄存器,然后将其设置为其他线程应有的值。上下文切换总是保存线程的状态,并加载要启动的线程先前保存的状态。这是一个 CPU 寄存器级别。这种上下文切换非常耗时;因此,上下文切换越多,用于线程管理的 CPU 资源就越多,而不是让它们运行。另一方面,如果没有足够的开关,一些线程可能没有足够的时间执行,程序就会挂起。
纤维是比线更细的单位。在线程中执行的程序代码可能会决定放弃执行,并告诉光纤管理器只执行其他光纤。有什么意义?为什么它比使用另一个线程更好?原因是这样,光纤可以避免部分上下文切换。上下文切换不能完全避免,因为开始执行它的代码的不同部分可能以完全不同的方式使用 CPU 寄存器。因为是同一个线程,所以上下文切换不是操作系统的任务,而是应用程序的任务。
纤程是比线更细的单位。在线程中执行的程序代码可能会决定放弃执行,并告诉纤程管理器只执行其他纤程。有什么意义?为什么它比使用另一个线程更好?原因是这样,纤程可以避免部分上下文切换。上下文切换不能完全避免,因为开始执行它的代码的不同部分可能以完全不同的方式使用 CPU 寄存器。因为是同一个线程,所以上下文切换不是操作系统的任务,而是应用程序的任务。
网络在连接到它的任何两台计算机之间传送数据包。网络上使用的协议是 IP,它只是 Internet 协议的缩写。使用 IP,一台计算机可以向另一台计算机发送数据包。包包含一个头和数据内容。标头包含发件人和目标计算机的 internet 地址、其他标志以及有关包的信息。由于机器之间没有直接连接,路由器转发数据包。这就像邮局互相寄信,直到他们交到你认识的邮递员手里,邮递员可以直接把信送到你的邮箱。为此,路由器使用标头中的信息。路由器如何交互的算法和组织是复杂的,我们不需要知道一些东西,就可以成为 Java 专业人士。
如果您需要编程才能直接发送 IP 包,则应查看`java.net.DatagramPacket`,因为其余的都是在 JDK、操作系统和网卡固件中实现的。您可以创建数据包;发送数据包并更改网卡上的调制电压或向光纤发射光子不是您关心的问题。
如果您需要编程才能直接发送 IP 包,则应查看`java.net.DatagramPacket`,因为其余的都是在 JDK、操作系统和网卡固件中实现的。您可以创建数据包;发送数据包并更改网卡上的调制电压或向纤程发射光子不是您关心的问题。
Spring 中的 AOP 实现通过为目标对象生成代理对象来工作,处理程序调用我们在 Spring 配置中定义的方面。这就是您不能将方面放在`final`类或`final`方法上的原因。此外,您不能在`private`或`protected`方法上配置方面。原则上,`protected`方法可以被代理,但这不是一个好的实践,因此 Spring AOP 不支持它。类似地,不能将方面放在不是 springbean 的类上。它们是由代码直接创建的,而不是通过 Spring 创建的,并且在创建对象时没有机会返回代理而不是原始对象。简单地说,如果不要求 Spring 创建对象,它就不能创建自定义对象。我们最不想做的就是执行这个程序,看看方面是如何执行的。审计日志的实现非常简单。我们使用标准日志,这对于审计日志的实际应用来说是不够的。我们所做的唯一特殊的事情是使用一个由名称`AUDIT_LOG`而不是类名称标识的记录器。在大多数日志框架中,这是对日志记录器的合法使用。尽管我们通常使用类来标识记录器,但是使用字符串来标识记录器是绝对可能的。在我们的日志记录中,这个字符串也将被打印在控制台的日志行中,并且它将在视觉上突出。
但是,[正如 Brian Goetz 所写](https://cr.openjdk.java.net/~briangoetz/amber/datum.html),问题来了:
*"Are they extensible? Are the fields mutable? Can I control the behavior of the generated methods or the accessibility of the fields? Can I have additional fields and constructors?"*
术语**续**并不新鲜。在*纤维*之前使用。它表示*一个顺序执行的指令序列,可以挂起自身*。并发处理器的另一部分是**调度器**,它*将继续分配给 CPU 核心,将暂停的一个替换为准备运行的另一个,并确保准备恢复的继续最终将分配给 CPU 核心。*当前的线程模型也有一个延续和一个调度程序,即使它们并不总是作为 API 公开。Loom 项目打算将 continuation 和 scheduler 分开,并在它们之上实现 Java 纤维。现有的`ForkJoinPool`可能会用作纤维
术语**延续**并不新鲜。在*纤程*之前使用。它表示*一个顺序执行的指令序列,可以挂起自身*。并发处理器的另一部分是**调度器**,它将延续分配给 CPU 核心,将暂停的一个替换为准备运行的另一个,并确保准备恢复的延续最终将分配给 CPU 核心。当前的线程模型也有一个延续和一个调度程序,即使它们并不总是作为 API 公开。Loom 项目打算将 continuation 和 scheduler 分开,并在它们之上实现 Java 纤程。现有的`ForkJoinPool`可能会用作纤程