zoukankan      html  css  js  c++  java
  • socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)

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

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

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

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

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

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

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

    阻塞!

  • 相关阅读:
    JS精度问题(0.1+0.2 = 0.3吗?)
    力导向算法的研究与改进
    React Hooks的memo和useCallback
    React Hooks vs Vue Composition Api
    docker常用命令
    win10一台电脑上配置多个git账户
    eslint+prettier 统一代码风格
    c#中关于值类型,引用类型在栈,堆栈的分配
    js里的__proto__和prototype
    golang之冒泡排序
  • 原文地址:https://www.cnblogs.com/honpey/p/10111408.html
Copyright © 2011-2022 走看看