首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

八股文!!

拥塞窗口减小,发送方降低发送频率,后随着确认报文持续增加拥塞窗口,直至达到通告窗口下一次拥塞发生 慢启动 当发送方一次发送多个报文段时,这些报文段经过慢速路由器时,可能因为路由器缓冲不够而被丢弃,...机器崩溃 机器崩溃时,tcp内核模块无法做出反应,对端不会接收到任何通知也不会再接收到任何数据 另一端read该套接字时,将会被挂起得到EAGAIN错误 另一端write该套接字时将会持续重传,直到...read该套接字时,将会被挂起得到EAGAIN错误。...,永远无法发现对端异常 网络断开 网络断开时,数据无法发送到对方,正常的数据通信和触发关闭链接的报文都被抑制 另一端read该套接字时,将会被挂起得到EAGAIN错误 另一端write该套接字时将会持续重传..._2状态,另一端将停留在TIME_WAIT状态,半关链接大量积累,也导致系统进程无文件描述符可用 当一端使用了shutdown关闭了写端,另一端未执行shutdown关闭写端,并且没有使用close

96411

HTTP、WebSocket、gRPC WebRTC:哪种通信协议最适合您的应用程序?

这意味着如果数据包未发送损坏,可能丢失一些数据。UDP 通常用于流媒体实时应用程序,在这些应用程序中,丢弃数据包的问题比确保交付要少。...有几个重要的特征: 单个 HTTP/2 连接可以包含多个并发打开的,其中任一端点交错来自多个的帧。 可以单方面建立和使用,也可以由客户端服务器共享。 可以被任一端关闭。...无论您如何序列化此数据,如果架构发生变化,都可能需要在多个环境中手动更新底层代码。...您还需要确保为每种语言正确实施架构,如果 API 发生变化,则需要手动更新所有服务。 另一方面,gRPC 为我们处理 HTTP/2.0 协议的实现。编写单个模式,可以为所有使用的语言生成相应的代码。...但是,如果另一个具有完全不同 IP 地址的外部设备决定将数据包发送到先前使用的同一端口上的路由器外部 IP 地址,会发生什么情况?路由器是否应该将其转发到映射到该端口号的本地设备?

76040

HTTP、WebSocket、gRPC WebRTC:哪种通信协议最适合您的应用程序?

这意味着如果数据包未发送损坏,可能丢失一些数据。UDP 通常用于流媒体实时应用程序,在这些应用程序中,丢弃数据包的问题比确保交付要少。...有几个重要的特征: 单个 HTTP/2 连接可以包含多个并发打开的,其中任一端点交错来自多个的帧。 可以单方面建立和使用,也可以由客户端服务器共享。 可以被任一端关闭。...无论您如何序列化此数据,如果架构发生变化,都可能需要在多个环境中手动更新底层代码。...您还需要确保为每种语言正确实施架构,如果 API 发生变化,则需要手动更新所有服务。 另一方面,gRPC 为我们处理 HTTP/2.0 协议的实现。编写单个模式,可以为所有使用的语言生成相应的代码。...但是,如果另一个具有完全不同 IP 地址的外部设备决定将数据包发送到先前使用的同一端口上的路由器外部 IP 地址,会发生什么情况?路由器是否应该将其转发到映射到该端口号的本地设备?

1.2K20

【Pod Terminating原因追踪系列之三】让docker事件处理罢工的cancel状态码

在有了之前的排查经验后,我们很快猜到会不会是处理事件的方法processEventStream在处理exit事件的时候发生了阻塞?...,monitor每隔500ms会对到containerd的grpc连接做健康检查并记录失败的次数,如果发现gRPC连接返回状态码为UNKNOWN或者NOT_SERVING时对失败次数加1,当失败次数大于域值...: [kuymzjbtcr.png] 从结果中发现在unix socket下客户端close连接是有概率导致grpc返回cancel状态码的,那么具体什么情况产生cancel状态码呢?...但由于客户的日志级别较高,我们没法从中获得问题产生时的具体时序,因此希望通过调低日志级别复现问题来定位具体在什么情况产生这个问题。...在reconnect之前使用旧的gRPC连接成功,订阅到containerd的事件,那么在reconnect时会close这条旧连接,而如果恰好在这时containerd在传输事件,那么该gRPC连接就会返回一个

2K96

CC++开发基础——IO操作与文件

4.断开对象与外部设备的关联,比如关闭文件。 5.释放流对象占用的内存资源。...read():读取字符数组。 (2).回退 unget():在读取的时候回退一个位置,将读取的前一个字符放回到中。如果当前位置是的起始位置,调用unget()失败。...unget:读取期间,回退一个字符。 tellg:返回流中的当前操作位置。 seekg:移动到中的指定位置。 sync:与存储设备同步。 字符输出的操作: operator<<:格式化输出。...std::ifstream:从文件读取数据 std::fstream:双向操作文件 std::ofstream, std::ifstream文件的析构函数自动关闭底层文件,所以操作完文件以后不需要显式调用...ios::ate:将指针移动到的末尾。 文件默认以文本模式打开文件如果指定了ios_base::binary,文件将以二进制模式被打开。

21230

Java IO 总结

数据是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。...数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段按先后顺序形成一个长的数据。...注意:若输入阻塞,当前线程将被挂起如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用, public long skip(long...n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取 public int close( ) :使用完后,必须对我们打开的流进行关闭。...public void close( ) : 关闭输出并释放与相关的系统资源。

54520

协程 Flow 最佳实践 | 基于 Android 开发者峰会应用

如同许多 Android 应用一样,ADS 应用从网络缓存懒加载数据。我们发现,这种场景非常适合 Flow。挂起函数 (suspend functions) 更适合于一次性操作。...由于末端操作符 (terminal operator) 触发数据的执行,同时会根据生产者一侧操作来决定是成功完成操作还是抛出异常,因此 Flows 自动地关闭数据,您基本不会在生产者一侧泄漏资源...请确保在不需要 BroadcastChannel 的时候将其关闭。同时请注意关闭后的 BroadcastChannel 无法再次被使用,如果需要,您需要重新创建实例。...特别说明 部分 Flow 和 Channel API 仍处于实验阶段,很可能会发生变动。在一些情况下,您可能正在使用 Channel,不过在未来可能建议您使用 Flow。...在测试完毕后不关闭 Flow BroadcastChannel 将会导致内存泄漏以及测试结果不一致。

3.5K11

JAVASE中IO笔记

方法,可以操作字节数组,也可以操作单个字节 InputStream: 1.操作的数据都是字节 2.定义了输入字节流的基本共性功能 3.输入流中的方法都是read方法 read():读取一个字节并且返回,...如果没有字节可以读了就返回-1 缓冲字节流: BufferedInputStream:缓冲字节输入流 BufferedOutputStream:缓冲字节输出 字节流.jpg 字符流转换流: Reader...将对象的状态信息转换为可以存储传输的形式的过程,在序列化期间,对象将其当前状态写入到临时存储区持久性存储区,之后,便可以通过从存储区中读取反序列化对象的状态信息,来重新创建该对象(反序列化) 3....什么情况下需要序列化?...如果对类的源代码作了修改,再重新编译,新生成的类文件的 serialVersionUID 的取值有可能也会发生变化。

49331

深入剖析Socket实现

如果希望了解更详尽的内容,可以参考TCP规范,关于该方面的其他著作(例如TCP/IP详解)。          图1是一个Socket实例所关联的一些信息的简化视图。...如果网络子系统由于某种原因无法处理这些消息,该数据包将毫无提示地被丢弃(不过这种情况很少发生)。...1、缓冲区和TCP          作为程序员,在使用TCP套接字时需要记住的最重要一点是: 不能假设在连接的一端将数据写入输出和在另一端从输入流读取数据之间有任何一致性。          ...尤其是在发送端由单个输出的write()方法传输的数据,可能会通过另一端的多个输入流的read()方法来获取;而一个read()方法可能返回多个write()方法传输的数据。     ...有重要的一点需要明确,这个转移过程无法由用户程序控制直接观察到,并且在块中(chunk)发生,这些块的大小在一定程度上独立于传递给write()方法的缓冲区大小。

76920

编写一个go gRPC的服务

简单期间,有个 bash 脚本可以帮我们生成合适的代码 codegen.sh (https://github.com/grpc/grpc-go/blob/master/codegen.sh) ?...如果在调用过程中发生任何错误,我们返回一个非 nil 的错误; 客户端流式 RPC 客户端方法 RecordRoute,我们通过它可以从客户端拿到一个 Point 的,其中包括我们需要的Point...服务器需要在每次调用后检查 Read() 返回的错误。如果返回值为 nil,依然完好,可以继续读取; 如果返回值为 io.EOF,消息结束,服务器可以返回它的 RouteSummary。...虽然客户端和服务器端总是拿到对方写入时顺序的消息,它们可以以任意顺序读写——的操作是完全独立的。...如果返回为 nil,依然完好并且可以继续读取;如果返回为 io.EOF,则说明消息已经结束;否则就一定是一个通过 err传过来的 RPC 错误。 客户端流式 RPC ?

1.6K70

速读原著-TCPIP(TCP紧急方式)

第20章 TCP的成块数据 20.8 紧急方式 T C P提供了“紧急方式 ( u rgent mode)”,它使一端可以告诉另一端有些具有某种方式的“紧急数据”已经放置在普通的数据中。...另一端被通知这个紧急数据已被放置在普通数据中,由接收方决定如何处理。 可以通过设置 T C P首部(图1 7 - 2)中的两个字段来发出这种从一端到另一端的紧急数据已经被放置在数据中的通知。...但是如果服务器进程进入了紧急方式,尽管它不能够发送任何数据,服务器 T C P也立即发送紧急指针和U R G标志。...如果在接收方处理第一个紧急指针之前,发送方多次进入紧急方式会发生什么情况呢?在数据中的紧急指针向前移动,而其在接收方的前一个位置将丢失。接收方只有一个紧急指针,每当对方有新的值到达时它将被覆盖。...我们将看到Te l n e t通过在数据中加入一个值为 2 5 5的字节作为前缀来标记它所有的命令。 一个例子 让我们观察一下即使是在接收方窗口关闭的情况下, T C P是如何发送紧急数据的。

1.3K20

gRPC in ASP.NET Core 3.x - gRPC 简介

所以它并不需要懂得这些消息的内容,生成的代码负责理解这些消息,但是传输协议需要负责把消息从一端传递到另一端。 目前,好像gRPC只能使用Protocol Buffer这一个传输协议。...但是gRPC在设计的时候,它的传输层是可插拔的,所以如果我们想把Protocol Buffer使用某种JSONXML的协议替换掉,是可行的。...gRPC 生命周期 ? gRPC或者RPC的生命周期可以参考上图。 首先,需要创建一个隧道,该隧道包装实际用来传输消息的线路协议。...消息传输类型 gRPC的消息传输类型有4种。 第一种是一元的消息,就是简单的请求--响应。 第二种是server streaming(),server会把数据streaming回给client。...需要注意的时候,在发送期间,server一直等待,直到整个请求都被接收到。在接收到整个请求之前,server不会做任何处理动作。

73920

gRPC的平滑关闭和在Kubernetes上的服务摘方案总结

平滑关闭 在这个章节里除了介绍 gRPC框架平滑关闭应用的方法外还会介绍一下Kubernetes集群里完成Pod删除的整个生命周期,因为如果我们的gRPC服务部署在Kubernetes集群里的话,服务的平滑关闭和摘都会依赖这个...gRPC的gracefulStop gRPC 框架使用的通信协议是HTTP2,HTTP2对于连接关闭使用 goaway 帧信号(类型是0x7,用于启动连接关闭发出严重错误状态信号)。...Kubernetes 默认等待30秒让Pod完成关闭如果需要等待超过30秒应用才能正常退出,可以使用terminationGracePeriodSeconds 在Deployment里自己配置平滑关闭...」 Service 本身其实是会为Pod做探活和摘的,但是如果你的应用的访问量足够大,Service的摘有时候并不及时,在Pod 关闭的时候还是会有新流量进来。...上面动作会同时并行发生,这就导致了有可能Pod已经进入关闭序列了,但是Service那里还没有做完摘,Service还是有可能会把新来的流量路由给要关闭的Pod上。

1.2K20

传统同步阻塞和异步非阻塞的区别理解

有的话就交给我处理,没有的话我一再来问一遍。”然后进程就一直从头到尾问这10000个连接,如果这10000个连接都没有I/O事件,就会造成CPU的空转,并且效率也很低,不好不好。...那么,如果发明一个代理,每次能够知道哪个连接有了I/O事件,不就可以避免无意义的空转了吗?...升级版I/O复用 select() select可以同时观察许多的I/O事件,在空闲的时候,会把当前线程阻塞掉,当有一个多个有I/O事件时,就从阻塞态中醒来,于是我们的程序就会轮询一遍所有的(于是我们可以把...因为从select那里仅仅知道了,有I/O事件发生了,但却并不知道是那几个(可能有一个,多个,甚至全部),我们只能无差别轮询所有,找出能读出数据,或者写入数据的,对他们进行操作。...举例来说:同样的4个进程,如果采用一个进程负责一个request的方式;那么,同时进来4个request之后,每个进程就负责其中一个,直至会话关闭期间如果有第5个request进来了。

1K10

Funny things of nio

DataInputStream和DataOutputStream分析 扫描(Scanner) Runtime.getRuntime().exec踩坑总结(/bin/sh -c、异常重定向) OP_READ...直接缓冲区提高运行效率的原理是每次调用基于操作系统的I/O操作之前之后,JVM都会尽量避免将缓冲区的内容复制到中间缓冲区,或者从中间缓冲区中获取内容,这样就节省了一个步骤。...踩坑总结(/bin/sh -c、异常重定向) OP_READ和OP_WRITE事件的触发条件 OP_READ 有数据可以读取 远程另一端关闭 有一个错误的pending 断开连接后,为了让你知道连接已断开...,所以产生OP_READ事件。...处理不当很容易导致CPU 100% OP_WRITE触发条件: 前提:interest了OP_WRITE 触发条件: socket发送缓冲区可写 远端关闭 有错误发生 正确的处理方式: 仅在已经连接的

41020
领券