socket

网络模型

OSI:

应用层:主要是一些终端应用

表示层:对接受的数据进行解释,加密,压缩与解压缩

会话层:通过传输层数据传输的通路

传输层:定义了传输数据的协议与端口号

网络层:设备是路由器,主要将从下层接收到的数据进行IP地址的封装与解封

数据链路层:设备是交换机

物理层:定义物理设备标准,如:网线的接口类型,光纤的接口类型,各种传输介质的传输速率

TCP/IP:应用层,传输层,网际层,主机至网络层

网络通信的三要素:

IP地址:主机的唯一标识

端口号:正在运行程序的标识

传输协议:TCP,UDP

Socket

1.什么是 Socket?

(IP地址与端口号组合在一起)Socket 主要是用来网络中两个进程的通信,我们需要考虑 2 个问题,第一是在网络中如何定位到一台主机并且能找到相应的服务(因为一台主机上可能运行多个服务或者进程),第二是如何可靠高效的传输数据。在本地可以通过进程 PID 来唯一标识一个进程,但是在网络中这是行不通的。其实 TCP/IP 协议族已经帮我们解决了这个问题,网络层的“ip 地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip 地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 socket。Socket 本质是编程接口(API),对 TCP/IP 的封装,Socket通常用来实现客户方和服务方的连接。Socket 是 TCP/IP 协议的一个十分流行的编程实现,一个 Socket 由一个 IP 地址和一个端口号唯一确定。但是,Socket所支持的协议种类也不光 TCP/IP 一种,因此两者之间是没有必然联系的。

2 socket 的通信过程

Server 端 Listener(监听)某个端口是否有连接请求,Client 端向 Server 端发出Connect(连接)请求,Server 端向 Client 端发回 Accept(接受)消息。一个连接就建立起来了。Server 端和 Client 端都可以通过 Send,Write 等方法与对方通信。最后关闭 Socket。

3.TCP,UDP

UDP ,用户数据报协议,计算机之间不必建立连接,数据打包发送,每包最多发送64K数据,因为不需要建立连接,所以不安全,效率高,是不可靠协议。

TCP,传输控制协议,通过三次握手建立连接,通过IO流传输数据,对数据大小没有限制,因为建立好了连接,数据传输过程是安全的,是一个可靠协议,传输速度慢,效率低

区别

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;

UDP尽最大努力交付,即不保证可靠交付

Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。

如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP对系统资源要求较多,UDP对系统资源要求较少。

线程

1.实现线程的方法:

a.继承Thread类,实现run方法

b.继承runnable接口

2.简单方法:

sleep:线程休眠

join:线程抢占

yield:线程礼让,暂停片刻,让CPU先执行其他线程

setDaemon:守护线程

stop:终止线程

interrupt:中断线程

2、Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?

sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复

wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lockpool),如果线程重新获得对象的锁就可以进入就绪状态

3、线程的sleep()方法和yield()方法有什么区别?

① sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;

② 线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态;

③ sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常;

④ sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性。

4、请说出与线程同步以及线程调度相关的方法?

wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要处理InterruptedException异常;

notify():唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且与优先级无关;

notityAll():唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让它们竞争,只有获得锁的线程才能进入就绪状态;

线程池:

1.优点:

1)避免线程的创建和销毁带来性能消耗  

2)避免大量的线程间因互相抢占系统资源导致的阻塞现象 

3)能够对线程进行简单的管理并提供定时执行,间隔执行等功能

2.线程池包括

corePoolSize:线程池核心线程数量maximumPoolSize:线程池最大线程数量

keepAliverTime:当活跃线程数大于核心线程数时,空闲的多余线程最大存活时间

unit:存活时间的单位

workQueue:存放任务的队列

handler:超出线程范围和队列容量的任务的处理程序

3.线程池的实现原理

a、判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创建)则创建一个新的工作线程来执行任务。如果核心线程都在执行任务,则进入下个流程。

b、线程池判断工作队列是否已满,如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。

c、判断线程池里的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.1 TCP/IP协议组 TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成 IP层负责...
    F麦子阅读 2,847评论 0 25
  • 一: 网络各个协议:TCP/IP、SOCKET、HTTP 网络七层由下往上分别为物理层、数据链路层、网络层、传输层...
    iYeso阅读 1,459评论 0 13
  • 转。。。。。。。。 SOCKET,TCP/UDP,HTTP,FTP (一)TCP/UDP,SOCKET,HTTP,...
    zeqinjie阅读 3,344评论 1 53
  • 提问话术列表 1.在成就事件梳理里面,你都遇到了哪些事情? 忘记了自己做过的事。 2.在一开始你看到这个活动通知和...
    阿怪lm阅读 1,062评论 1 2
  • 简静/文 爱如烟花般绚烂,亦如烟花般转瞬即逝! 我们看的是电影《烟花》,醒悟的却是生命中的爱。 有多少人不知道爱是...
    洛凡晨阅读 428评论 0 3