UNP学习 非阻塞I/O
缺省状态下,套接口时阻塞方式的。这意味着当一个套接口调用不能立即完成时,进程进入睡眠状态,等待操作完成。我们将可能阻塞的套接口调用分成四种。
1.输入操作:read、readv、recv、recvfrom和recvmsg函数。TCP时一个字节流,数据到来前一直会睡眠,UDP如果接收缓冲区为空,进程将在一个UDP数据报到来之前睡眠。
在一个非阻塞套接口上,如果输入操作不能被满足,他们将会立即返回一个EWOULDBLOCK错误。
2.输出操作:write、writev、send、sendto和sendmsg函数。对TCP socket内核从应用进程缓冲区向套接口发送缓冲区中拷贝数据。如果在套接口发送缓冲区中没有空间,进程会一直睡眠到腾出空间。
3.接收外来连接:accept函数。如果在一个i额阻塞套接口上调用accept函数,而且没有新的连接,进程就会进入睡眠状态。如果在一个非阻塞套接口上调用accept函数,而且没有新的连接,将返回EWOULDBLOCK错误。
4.初始化外出的连接:用于TCP的connect函数。用于TCP的connect函数,展示了TCP连接的建立包含一个三路握手过程,而且conect函数在客户接收到它的SYN的ACK前不会返回。这意味着TCP connect总是会使调用它的进程阻塞起码到服务器的一次往返时间
一、非阻塞connect
当在一个非阻塞TCP的套接字上调用connect时,connect将立即返回一个EINPROGRESS错误。
非阻塞的connect有三个用途:
1.我们可以把三路握手叠加在其他处理上。
2.我们可以使用这个技术同时建立多个连接。
3.既然使用select等待连接的建立,我们可以给select指定一个时间限制,使得我们能够缩短connect的超时。
非阻塞connect有一些必须处理的细节:
1.尽管套接字是非阻塞的,如果连接到的服务器在同一个主机上,那么当我们调用connect时,连接通常立刻建立。我们必须处理这种情形。
2.有关于select和非阻塞connect的以下两个规则:(1)当连接成功建立时,描述符变为可写
(2)当连接建立遇到错误时,描述符变为既可读又可写。
二、非阻塞accept
UNP学习 非阻塞I/O的更多相关文章
- UNP学习笔记(第十六章 非阻塞I/O)
套接字的默认状态时阻塞的 可能阻塞的套接字调用可分为以下4类: 1.输入操作,包括read.readv.recv.recvfrom和recvmsg. 2.输入操作,包括write.writev.sen ...
- 【MPI学习4】MPI并行程序设计模式:非阻塞通信MPI程序设计
这一章讲了MPI非阻塞通信的原理和一些函数接口,最后再用非阻塞通信方式实现Jacobi迭代,记录学习中的一些知识. (1)阻塞通信与非阻塞通信 阻塞通信调用时,整个程序只能执行通信相关的内容,而无法执 ...
- 【Todo】React & Nodejs学习 &事件驱动,非阻塞IO & JS知识栈:Node为主,JQuery为辅,Bootstrap & React为辅辅,其他如Angular了解用途即可
JS知识栈:Node为主,JQuery为辅,Bootstrap & React为辅辅,其他如Angular了解用途即可 今天在学习ReactJS和NodeJS,看到关于ReactJS的这篇文章 ...
- 网络编程基础——学习阻塞,非阻塞(select和epoll)
<h3 class="xyn" helvetica="" neue',="" helvetica,="" aria ...
- nginx学习(二)——基础概念之异步非阻塞
上面讲了很多关于nginx的进程模型,接下来,我们来看看nginx是如何处理事件的. 有人可能要问了,nginx采用多worker的方式来处理请求,每个worker里面只有一个主线程,那能够处理的并发 ...
- 阻塞 io 非阻塞 io 学习笔记
阻塞 io 非阻塞 io 学习笔记
- 并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理
· 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列.另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas ...
- IO - 同步 异步 阻塞 非阻塞的区别,学习Swoole有帮助
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?本文较长需耐心阅读,基础 ...
- Java并发包源码学习系列:基于CAS非阻塞并发队列ConcurrentLinkedQueue源码解析
目录 非阻塞并发队列ConcurrentLinkedQueue概述 结构组成 基本不变式 head的不变式与可变式 tail的不变式与可变式 offer操作 源码解析 图解offer操作 JDK1.6 ...
随机推荐
- mysql 8.0版本下载安装以及默认密码修改
1. 下载 去mysql官网下载地址进行下载,选择需要的安装包 可以直接跳过登录进行下载 ps:我是先注册账号下载的,注册时遇到一个坑,就是在chrome75版本无法选择省市,不选择又不让注册. 可以 ...
- VC++ 控件赋值取值
SetWindowText(SetWindowTextW)void SetWindowText( LPCTSTR lpszString );GetWindowText(GetWindowTextW ...
- Linux操作系统之安全审计功能
内核编译时,一般打开NET选项就打开AUDIT选项了.在系统中查看audit是否打开,root 用户执行:service auditd status 我们知道在Linux系统中有大量的日志文件可以用于 ...
- 多级xml解析方案
package com.people.xmlToSql; import java.io.File; import java.io.IOException; import java.io.StringW ...
- 利用float与overflow:hidden实现移动端两栏自适应布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Cocos2d Box2D之静态刚体
| 版权声明:本文为博主原创文章,未经博主允许不得转载. b2_staticBody 在模拟环境下静态物体是不会移动的,就好像有无限大的质量.在Box2D的内部会将质量至反,存储为零.静态物体也可 ...
- Ubuntu解压缩rar格式文件
解压缩rar文件时,出现问题 解决方法: sudo apt-get install unrar
- sciencedirect 网站抓取过程
开发环境 C#+SQLite 软件使用教程: 设置页面 1. 首先录入需要查询的关键词,如果需要根据年去查询,可以勾选对应的年,支持多个年份查询.点击[设置关键字]按钮,把待查询关键 ...
- 62.Longest Valid Parentheses(最长的有效括号)
Level: Medium 题目描述: Given a string containing just the characters '(' and ')', find the length of ...
- 【目录】Identityserver 4 老张的哲学
随笔分类 - .IdentityServer4 从壹开始 [ Ids4实战 ] 之四 ║ 用户数据管理 & 前后端授权联调 摘要: 前言 哈喽~~~ 大家周一好!夏天到了,大家舒服了没有,熟话 ...