冯诺伊曼、进程线程、TCP发送

一、冯·诺依曼结构计算机的原理

引出问题
所有的计算机语言, 不管是Java, Python, Go, C, C++, PHP… 最终都要变成基本的二进制指令,老老实实地在冯·诺依曼结构计算机上按规矩执行。这里是根,我们看到的、用到的都是这棵树上的花和枝叶。作为志向远大的、有着强烈好奇心的年轻人, 难道你不想到根部来看一看?

cpu和内存在冯诺伊曼的地位
作为最基本的要求, 必须要了解CPU和内存这俩哥们是怎么亲密无间工作的: CPU从内存取出指令,进行译码和执行,执行时从内存中取出数据放到寄存器中, 进行计算, 然后把结果写回到内存。如果是跳转指令, CPU则取出跳转目的地的指令继续执行。
如此简单的过程,竟然组成了多姿多彩的电脑世界: 你可以听音乐,玩游戏、上网聊天、用Word来写文档… 当然看起来微不足道的一个操作,进入到CPU和内存中都可能需要成千上万条指令来完成。
CPU和内存、硬盘等设备的速度不匹配,是冯·诺依曼结构计算机的一个核心问题,为了解决这个问题,科学家们绞尽脑汁,想尽了办法,又引出了一堆概念: 缓存,DMA, 同步,异步,阻塞…

进程和线程

这俩家伙的重要性不言而喻,因为你写的所有的程序要么会成为一个独立的进程去执行,要么是被一个进程中的线程收编,没有例外 。
进程是对一个运行中的程序的抽象,没有这个概念,我们是无法实现一边听歌、一边上网的惬意生活。

每个进程都有一个被操作系统老大维护的进程控制块, 里边保存了这个进程在运行时的重要信息,是进程能来回切换的重要保证。 而线程则寄居于进程之内, 共享进程提供福利(代码和数据)的同时, 还拥有自己的一亩三分地。 线程的出现,提升了系统的性能、吞吐量和响应性。
但是多进程/多线程编程也带来了一系列问题: 同步,通信,锁, 死锁。。。
作为码农我们要理解的核心概念是: 分组交换, TCP/IP参考模型, socket , http(s)。

有关网络上数据的发送和TCP

你也许没有想到,你上网玩游戏,听音乐,看这篇文章,其中的数据并不是一下子全发给你的, 而是被切分成适合网络传输的小块,给每个小块编上号,每个小块都独立地走相同甚至不同的网络路径, 到达你这里,重新排序,组合,然后才展示给你, 这就是分组交换。

使用分组交换可以充分的利用网络带宽: 在你不使用的间隙,别人也可以利用。

但是一个很明显的问题就是分组数据丢失了怎么办? 如何检测,怎么重发,如何缓存已经收到分组数据等一系列烦人的问题接踵而来。 这就是TCP要干的事情。

如果你能体会到TCP是在端系统实现的,中间节点一无所知,我想你就Get到了分组交换和分层的真谛。 TCP/IP参考模型定义了5层:应用层,传输层,网络层,链路层,物理层。
你一定得理解所谓的分层只不过是把你的数据层层包装而已,在传输的过程层中每到一个节点都会拆开某一层的包装,查看一下数据,然后再次包装,转发出去,直到终点。

from 码农翻身

发布了149 篇原创文章 · 获赞 0 · 访问量 2895

猜你喜欢

转载自blog.csdn.net/yunxiu988622/article/details/105329980