计算机课内知识总结

目录

一:死锁的四个必要条件

二:TCP和UDP区别

三:JVM简介

四:线程,进程,协程

五:重载,多态

六:tcp连接关闭过程

七:乐观锁,悲观锁


​​​​​​​

一:死锁的四个必要条件

        死锁是指两个或者两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,它们将无法推进下去,此时系统处于死锁状态。

  • 互斥条件:一个资源每次只能被一个进程使用;
  • 请求与保持条件:一个进程因为请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:进程已经获得的资源,在未使用前,不能强行剥夺;
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

二:TCP和UDP区别

    TCP(Transmission Control Protocol,传输控制协议)

    UDP(User Data Protocol,用户数据报协议)

上述两者都属于TCP/IP协议簇,TCP/IP协议包括了超文本传输协议(HTTP),文本传输协议(FTP),远程登录协议(Telnet)

计算机课内知识总结

TCP和UDP的区别

  • 连接性TCP是面向连接的协议,在收发数据前必须和对方建立可靠的连接,建立连接的3次握手,断开连接的4次挥手,为数据传输打开可靠基础;UDP是一个面向无连接的协议,数据传输前,源端和终端不建立连接,发送端尽可能的将数据扔到网络上,接收端从消息队列中读取消息端。
  • 可靠性:TCP提供可靠交付的服务,传输过程中采用许多方法保证在连接上提供可靠的传输服务,如编号确认,流量控制,计时器等,确保数据无差错,不丢失,不重复且按序到达;UDP使用尽可能最大努力交付,但是不保证可靠交付。
  • 字节流和报文TCP面向字节流,将应用层看成一串无结构的字节流,分解成多个TCP报文段传输后,在目的站重新装配; UDP协议面向报文,不拆分应用层报文,只保留报文边界。
  • 吞吐量控制:TCP拥塞控制,流量控制,重传机制,滑动窗口等保证传输质量;UDP则没有。

三:JVM简介

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,他是虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算功能来实现的。

    简单来说,JVM用于执行Java应用程序和字节码的软件模块,并且可以将字节码转换为特定硬件和操作系统的本地代码。JVM在执行字节码的时候,实际上最终还是把字节码解释成具体平台上的机器指令执行,这就是Java的能够“一次编译,到处运行”的原因。

四:线程,进程,协程

    进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈,寄存器,虚拟内存,文件句柄等)比较大,但相对比较稳定安全。

    线程:线程是指进程内的一个执行单元,也是进程内的可调度实体。线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

    协程:协程是一种用户级的轻量级线程,协程的调度完全由用户控制。从技术角度来说,协程就是你可以暂停执行的函数。协程拥有自己的寄存器上下文和栈。协程调度切换的时候,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先保存的寄存器上下文和栈,直接操作栈则没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

线程与进程的区别:

1) 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3) 线程是处理器调度的基本单位,但进程不是
4) 二者均可并发执行

5) 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

协程与线程的区别:

1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。

2) 线程进程都是同步机制,而协程则是异步。

3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。

4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。

5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。

6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。

五:重载,多态

六:tcp连接关闭过程

    三次握手:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

计算机课内知识总结

  • 客户端A发送SYN包(SYN = j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
  • 服务器B收到SYN包,必须确认客户A的SYN(ACK = j+1),同时自己也发送一个SYN包(SYN =K)即ACK+SYN包,此时服务器B进入SYN_RECV状态。
  • 服务端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK = k+1).此包发送完毕,客户端A和B进入ESTABLISHED状态,完成三次握手。
  • 完成三次握手,客户端与服务器开始传送数据。

断开连接:四次挥手

   由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一个方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

计算机课内知识总结

 

  •  客户端 A 发送一个 FIN,用来关闭客户 A 到服务器 B 的数据传送。  
  • 服务器 B 收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加1。和 SYN 一样,一个 FIN 将占用一个序号。  
  •  服务器 B 关闭与客户端 A 的连接,发送一个 FIN 给客户端 A。  
  • 客户端 A 发回 ACK 报文确认,并将确认序号设置为收到序号加1。
     

七:乐观锁,悲观锁

    乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。

    乐观锁:乐观锁在操作数据时候非常乐观,认为别人不会同时修改数据,因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据;如果别人修改了数据则放弃操作,否则执行操作。

    悲观锁:悲观锁在操作数据时候比较悲观,认为别人会同时修改数据。因此操作数据的时候直接把数据锁住,直到操作完成后才会释放锁。上锁期间其他人不能修改数据。

上一篇:最全MyBatis核心配置文件总结


下一篇:TCP协议