1、线程与进程的区别联系
可以从资源占用,效率,通信方式三方面进行说明。
进程:是系统中资源分配,调度运行的基本单位。比如用户启动一个程序,系统就会创建一个进程,并为他分配资源,如表,内存空间,I/O设备等。随后该进程进入进程的就绪队列,若被选中,则被分配CPU等其他资源,进行运行。
线程:是进程中执行运算的最小单位。如果说进程是逻辑上的操作系统所完成的任务,那线程就是完成该任务的可能的多个子任务之一。
使用线程的好处
1、易于调度
2、提高并发性,可以在一个程序中同时执行多个部分
3、减少开销,创建线程比进程要快
4、充分利用多处理器的功能
进程和线程的联系
1、一个线程属于一个进程,一个进程中有多个线程。线程是程序运行中的最小的调度和执行单位
2、资源分配是给进程的,一个进程中的多个线程共享资源,数据段(全局变量和静态变量),代码段,扩展段(堆存储)。每个线程有自己的栈段,存放局部变量和临时变量
3、处理机是在线程中运行的,所以每个处理机上运行的是线程
4、线程在运行中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
进程的切换过程
进程的切换就是挂起处理器上正在执行的进程,恢复以前挂起的某个进程放到处理器上运行。
进程的切换利用的是中断技术 。当调度器收到了待运行进程的控制块后,会通过软中断立即终止当前进程的运行,保存当前进程的PC值和PSW值,使用压栈指令把其他寄存器值压入当前进程的私有堆栈中。从待运行的进程的私有控制块中取出私有堆栈指针放入到处理器寄存器sp中,则sp的指针就指向待运行进程的私有堆栈。于是下面就自待运行进程的私有堆栈中弹出上下文进人处理器。最后,利用中断返回指令来实现自待运行进程的私有堆栈中弹出PSW值和自待运行进程的私有堆栈中弹出PC值的功能。
为什么TCP建连需要3次握手,断连需要4次
SYN(同步序列编号),ACK(确认字符),ISN(初始序列号)
发送方确认SYN标志,并生成一个SYN序列号,也就是当前消息序号来发送消息(消息的字节数为n)。接收方收到消息后,会将ACK确认标志和下次传递需要的序列号值传递给对方(通常是SYN+n)。告诉对方已经收到消息,并且下次传递序号应从(SYN+n)开始。
因为TCP通信方式规定,tcp协议是双全工的,即通信双方都可以向对方发送消息,也都可以独立关闭自己一方的通信通道。
3次握手中,Client和server都需要将自己的syn和isn告诉对方
第一次:Client将SYN,ISN传递给server
第二次:server将ACK,自身的syn,isn+n传递给Client(ack和syn同时传递,减少一次交流,所以是3次握手)
第三次:Client将ACK,SYN+n传递给server
4次挥手
当client数据传递结束后,会发送一个FIN告诉server,数据传递结束,此时server会传递一个ACK告诉client自己知道了,这是两次挥手
此时server的接收数据的通道就已经关闭,但还可以传递数据给client,如果没有什么发送的,
此时server会发送一个FIN给client,告诉他数据传递结束,client会回复server一个ACK告诉server自己知道了,又是两次挥手。
总共四次挥手。