计算机基础
CringKong
高级语言生产,底层思维学习
展开
-
字符编码--从Ascii到Unicode
我们知道,计算机终究是只能存储和计算0和1的机器,因为现在的半导体元件的性质决定了二进制是计算机所有存储和计算的本质。上面这张图可能很科幻,但是计算机里就是这种东西啊。看到知乎上有个不错的解读: 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动原创 2018-04-01 21:43:18 · 1531 阅读 · 0 评论 -
TCP协议--三次握手、四次挥手、十一种状态
最近学习Sokect编程时,突然想到计算机网络中学到的TCP的十一种状态图,因此决定好好复习一下TCP协议中比较容易朗朗上口却又不容易搞得清楚地三次握手和四次挥手的过程。先给大家拿出来教科书上经常展示的TCP十一种状态图,接下来一步一步说清楚这十一种状态的实际场景和如何转化。1.三次握手TCP协议是基于IP协议进行封装的,也就是说TCP包是基于IP报文进行了封装,这点很像Java下IO包,基于装饰者原创 2018-04-02 23:14:59 · 789 阅读 · 0 评论 -
CPU中的原子操作
今天在学习多线程时突然想到一个问题,CPU的CAS操作保证了原子性,但是现在的CPU都是多核心可以并行运算的多核CPU了,那CPU怎么实现并行运算时而又能保证对内存操作的原子性呢?于是查阅了一些资料,有了以下了解: 所谓原子操作,就是”不可中断的一个或一系列操作” 1.单核CPU的原子操作 在单核CPU中, 能够在一个指令中完成的操作都可以看作为原子操作, 因为中断只发生在指令间.也就是原创 2018-04-16 20:40:52 · 8420 阅读 · 5 评论 -
Java线程和操作系统线程的关系
1.操作系统线程模型1.1 线程实现在用户空间下 当线程在用户空间下实现时,操作系统对线程的存在一无所知,操作系统只能看到进程,而不能看到线程。所有的线程都是在用户空间实现。在操作系统看来,每一个进程只有一个线程。过去的操作系统大部分是这种实现方式,这种方式的好处之一就是即使操作系统不支持线程,也可以通过库函数来支持线程。我们换一种通俗的方式来讲解这段话,首先就是在这在模型下,程序员需要自己实原创 2018-04-18 18:06:01 · 28492 阅读 · 21 评论 -
以太网帧、IP数据报、TCP字段
我们知道,现在商用化的计算机网络是基于TCP/IP的四层模型。分别为:应用层传输层网络层网络接口层可以看到,每层都有属于自己的协议,这些协议其实就是一种规范,一种格式,为了让发送方和接收方都能理解的一种标准的格式。拿我们最熟悉的HTTP协议来说:可以看到,对于应用程序(比如运行在服务器上的服务器软件),能看到的内容就是:而实际上,在网络链路中传输的可不仅仅只是这一段HTTP协议的报文,应用原创 2018-04-13 22:15:11 · 4728 阅读 · 0 评论 -
JavaNIO和零拷贝(Zero Copy)
一.Linux操作系统中的零拷贝1.1先从Linux的普通I/O过程说起1.2内存映射方式I/O1.3内核空间内部传输I/O1.4理想状态下的零拷贝I/O1.5splice()系统调用二.JavaNIO中的零拷贝2.1NIO中内存映射方式I/O2.2NIO中的零拷贝今天在学习netty的时候,突然了解到一个新的概念,零拷贝(Zero Copy),涉及到操作系...原创 2018-05-10 22:32:34 · 12921 阅读 · 11 评论 -
关于equals和hashCode,看这一篇真的就够了
这几天在尝试手撸一个类似Lombok的注解式代码生成工具,用过Lombok的小伙伴知道,Lombok可以通过注解自动帮我们生产equals()和hashCode()方法,因此我也想实现这个功能,但是随着工作的深入,我发现其实自己对于equals()和hashCode()的理解,也处在一个很低级的阶段。因此痛定思痛,进行了一番深入学习,才敢来写这篇博客。文章目录1、equals在Java中含义2...原创 2019-04-21 14:27:54 · 4570 阅读 · 3 评论 -
伪共享--多线程性能的破坏者
文章目录前言1.从CPU说起1.1 CPU缓存1.2 缓存行1.3 MESI协议2. 伪共享3. 解决方案4. 后记前言前几天看到了伪共享这个概念,但是并没有去做深入的了解,今天又看到了这个概念,才想起来要好好研究一下伪共享究竟是个什么东西,反而在学习的过程中又引发了我对JMM(Java内存模型)的思考,前几天有个同事分享了JMM相关内容,当时我感觉自己已经比较了解了,但是今天来看似乎并没有能...原创 2019-07-31 21:06:30 · 524 阅读 · 0 评论 -
编译器重排序
在一些讲Java并发编程的书中,经常会出现JMM内存模型、volatile关键字、重排序、乱序执行等字眼,导致了有些刚开始学习Java并发编程的小伙伴一脸懵逼:这都是啥啊?文章目录1. 什么是编译器重排序1.1 定义1.2 举个例子1.3 重排序原因1.4 不仅仅是重排序2. 如何禁止?2.1 编译器屏障2.2 禁止重排序2.3 禁止寄存器存/取值2.4 volatile(C/C++)3. 结束...原创 2019-08-20 10:51:06 · 2799 阅读 · 3 评论