有关网络问题整理2

1. 同步:同步是指一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成;如端口下同时来了两个客户端请求,第一个先得到响应,与服务器建立通讯,而第二个请求会被阻塞直到第一个请求操作完成,各个请求之间排队,顺序执行。

2. 异步:异步是指不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作。然后继续执行下面代码逻辑,只要自己完成了整个任务就算完成了(异步一般使用状态、通知和回调)如来了多个请求,服务器端能同时响应多个客户端,同时给他们连接。各个客户端与服务器的通讯是并行的

3. 阻塞:阻塞是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务,不如input()如果你不输入数据,这个方法就一直等待,直到你输入数据后再向下执行。

4. 非阻塞:是指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回(继续执行下面代码,或者重试机制走起)

5种IO模型:

1.阻塞式IO:当用户进程调用了recvfrom 等阻塞方法,内核进入io阶段的第一阶段:准备数据,用户进程会被阻塞,等内核将数据准备好,在拷贝到用户的地址空间,内核返回结果,用户进程进入就绪状态;

2. 非阻塞式IO:

  • 当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error
  • 用户进程判断结果是一个error时,它就知道数据还没有准备好,于是它可以再次发送read操作
  • 一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存,然后返回
  • 非阻塞IO模式下用户进程需要不断地询问内核的数据准备好了没有

3. I/O多路复用:

  • 通过一种机制,一个进程可以监视多个文件描述符(套接字描述符)一旦某个文件描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作(这样就不需要每个用户进程不断的询问内核数据准备好了没)
  • 常用的IO多路复用方式有selectpollepoll

4. 信号驱动IO:

  • 内核文件描述符就绪后,通过信号通知用户进程,用户进程再通过系统调用读取数据。
  • 此方式属于同步IO(实际读取数据到用户进程缓存的工作仍然是由用户进程自己负责的)

5.异步IO:

  • 用户进程发起read操作之后,立刻就可以开始去做其它的事。内核收到一个异步IO read之后,会立刻返回,不会阻塞用户进程。
  • 内核会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都完成之后,内核会给用户进程发送一个signal告诉它read操作完成了。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值