博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)...
阅读量:5342 次
发布时间:2019-06-15

本文共 567 字,大约阅读时间需要 1 分钟。

网络上的同步写和异步写和磁盘的同步和异步不一样

网络上的同步写是写到tcp的缓冲区中,如果缓冲区没有地方了,那么是直接返回给用户态程序还是让用户程序卡住,这个是阻塞和非阻塞发生的地方。

注意:阻塞是指tcp缓冲区中是否有数,然后在机器不重启的情况下,tcp协议会保证你的数据到达对端!!!!也就是tcp协议是一种同步的协议!tcp协议就是文件系统中的“同步写”,他会有各种各样的机制来保证数据一定会达到对端!当然了这一路可能发生各种各样的事情!比如我发送端机器异常重启了,比如对端机器down机了,比如中间路由器挂掉了,所以在网络传输中,是怎么判断数据到没到对端?

有没有一种语义,我这条数据一定达到了对端?只能通过用户态来保证了,比如收到了数据之后,返回一条确认数据,然后对端接收,返回一个确认收到的数据包,只有用户态才能做这件事情。

用户态怎么判定数据一定达到了对端?

tcp链接我们知道数据一定是对到达对端的,但是这些超时重传啊什么的,都是内核态的行为,用户态怎么知道数据发送到没有。

这就是tcp的同步,那么放到了tcp的缓冲区之后,到底是谁发送出去的呢?是当前线程还是别的线程捏?【一切与文件系统对标,哈哈哈哈哈】

阻塞!

转载于:https://www.cnblogs.com/honpey/p/10111408.html

你可能感兴趣的文章
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
使用iperf测试网络性能
查看>>
struts2入门之准备工作
查看>>
从C语言的弱类型属性说起
查看>>
图片的显示隐藏(两张图片,默认的时候显示第一张,点击的时候显示另一张)...
查看>>
Docker 安装MySQL5.7(三)
查看>>
python 模块 来了 (调包侠 修炼手册一)
查看>>
关于CSS的使用方式
查看>>
本地MongoDB服务开启与连接本地以及远程服务器MongoDB服务
查看>>
跨域解决方案之CORS
查看>>
学习RESTFul架构
查看>>
分析语句执行步骤并对排出耗时比较多的语句
查看>>
原生JS轮播-各种效果的极简实现
查看>>
软件工程总结作业---提问回顾与个人总结
查看>>
计数器方法使用?
查看>>
带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
查看>>
sonar结合jenkins
查看>>
解决VS+QT无法生成moc文件的问题
查看>>
AngularJs练习Demo14自定义服务
查看>>