mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-08-14 05:21:42 +08:00
Compare commits
No commits in common. "7f9a6427095630c655f6e75147045b8c708d2b6d" and "032b9de3784a80f916fe61586c84582e26df6f39" have entirely different histories.
7f9a642709
...
032b9de378
@ -80,7 +80,7 @@ OSI 七层模型虽然失败了,但是却提供了很多不错的理论基础
|
|||||||
|
|
||||||
这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称。
|
这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称。
|
||||||
|
|
||||||
互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Internet Prococol)和许多路由选择协议,因此互联网的网络层也叫做 **网际层** 或 **IP 层**。
|
互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Intert Prococol)和许多路由选择协议,因此互联网的网络层也叫做 **网际层** 或 **IP 层**。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ tag:
|
|||||||
2. **第二次握手** :Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
|
2. **第二次握手** :Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
|
||||||
3. **第三次握手** :Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
|
3. **第三次握手** :Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
|
||||||
|
|
||||||
三次握手就能确认双方收发功能都正常,缺一不可。
|
三次握手就能确认双发收发功能都正常,缺一不可。
|
||||||
|
|
||||||
更详细的解答可以看这个:[TCP 为什么是三次握手,而不是两次或四次? - 车小胖的回答 - 知乎](https://www.zhihu.com/question/24853633/answer/115173386) 。
|
更详细的解答可以看这个:[TCP 为什么是三次握手,而不是两次或四次? - 车小胖的回答 - 知乎](https://www.zhihu.com/question/24853633/answer/115173386) 。
|
||||||
|
|
||||||
|
@ -325,14 +325,14 @@ pool-1-thread-2 End. Time = Sun Apr 12 11:14:47 CST 2020
|
|||||||
int c = ctl.get();
|
int c = ctl.get();
|
||||||
|
|
||||||
// 下面会涉及到 3 步 操作
|
// 下面会涉及到 3 步 操作
|
||||||
// 1.首先判断当前线程池中执行的任务数量是否小于 corePoolSize
|
// 1.首先判断当前线程池中之行的任务数量是否小于 corePoolSize
|
||||||
// 如果小于的话,通过addWorker(command, true)新建一个线程,并将任务(command)添加到该线程中;然后,启动该线程从而执行任务。
|
// 如果小于的话,通过addWorker(command, true)新建一个线程,并将任务(command)添加到该线程中;然后,启动该线程从而执行任务。
|
||||||
if (workerCountOf(c) < corePoolSize) {
|
if (workerCountOf(c) < corePoolSize) {
|
||||||
if (addWorker(command, true))
|
if (addWorker(command, true))
|
||||||
return;
|
return;
|
||||||
c = ctl.get();
|
c = ctl.get();
|
||||||
}
|
}
|
||||||
// 2.如果当前执行的任务数量大于等于 corePoolSize 的时候就会走到这里
|
// 2.如果当前之行的任务数量大于等于 corePoolSize 的时候就会走到这里
|
||||||
// 通过 isRunning 方法判断线程池状态,线程池处于 RUNNING 状态并且队列可以加入任务,该任务才会被加入进去
|
// 通过 isRunning 方法判断线程池状态,线程池处于 RUNNING 状态并且队列可以加入任务,该任务才会被加入进去
|
||||||
if (isRunning(c) && workQueue.offer(command)) {
|
if (isRunning(c) && workQueue.offer(command)) {
|
||||||
int recheck = ctl.get();
|
int recheck = ctl.get();
|
||||||
@ -394,7 +394,7 @@ pool-1-thread-2 End. Time = Sun Apr 12 11:14:47 CST 2020
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
//获取线程池中工作的线程的数量
|
//获取线程池中工作的线程的数量
|
||||||
int wc = workerCountOf(c);
|
int wc = workerCountOf(c);
|
||||||
// core参数为false的话表明队列也满了,线程池大小变为 maximumPoolSize
|
// core参数为true的话表明队列也满了,线程池大小变为 maximumPoolSize
|
||||||
if (wc >= CAPACITY ||
|
if (wc >= CAPACITY ||
|
||||||
wc >= (core ? corePoolSize : maximumPoolSize))
|
wc >= (core ? corePoolSize : maximumPoolSize))
|
||||||
return false;
|
return false;
|
||||||
|
@ -18,7 +18,7 @@ head:
|
|||||||
|
|
||||||
**为什么要弄一个 CPU 高速缓存呢?** 类比我们开发网站后台系统使用的缓存(比如 Redis)是为了解决程序处理速度和访问常规关系型数据库速度不对等的问题。 **CPU 缓存则是为了解决 CPU 处理速度和内存处理速度不对等的问题。**
|
**为什么要弄一个 CPU 高速缓存呢?** 类比我们开发网站后台系统使用的缓存(比如 Redis)是为了解决程序处理速度和访问常规关系型数据库速度不对等的问题。 **CPU 缓存则是为了解决 CPU 处理速度和内存处理速度不对等的问题。**
|
||||||
|
|
||||||
我们甚至可以把 **内存看作外存的高速缓存**,程序运行的时候我们把外存的数据复制到内存,由于内存的处理速度远远高于外存,这样提高了处理速度。
|
我们甚至可以把 **内存可以看作外存的高速缓存**,程序运行的时候我们把外存的数据复制到内存,由于内存的处理速度远远高于外存,这样提高了处理速度。
|
||||||
|
|
||||||
总结:**CPU Cache 缓存的是内存数据用于解决 CPU 处理速度和内存不匹配的问题,内存缓存的是硬盘数据用于解决硬盘访问速度过慢的问题。**
|
总结:**CPU Cache 缓存的是内存数据用于解决 CPU 处理速度和内存不匹配的问题,内存缓存的是硬盘数据用于解决硬盘访问速度过慢的问题。**
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user