为何要多此一举呢?这是因为在对方没有明确表示收到前,TCP 会通过定时器重发写缓冲区中的数据,保证消息能够到达对方。写缓冲区是有大小限制的,我在[第 10 讲]中会详细介绍。这里假设写缓冲区只有 1MB,所以调用 write 发送 2MB 数据时,write 函数的返回值只有 1MB,表示写缓冲区已用尽。当收到对方发来的 ACK 报文后,缓冲区中的数据才能释放,就会产生写事件通知进程发送剩余的那 1MB 数据。
来自:08 | 事件驱动:C10M是如何实现的?
7 人划过
如果主要分配 256KB 以下的内存,特别是在多线程环境下,应当选择 TCMalloc;否则应使用 Ptmalloc2,它的通用性更好
来自:02 | 内存池:如何提升内存分配的效率?
6 人划过
协程与异步编程相似的地方在于,它们必须使用非阻塞的系统调用与内核交互,把切换请求的权力牢牢掌握在用户态的代码中。但不同的地方在于,协程把异步化中的两段函数,封装为一个阻塞的协程函数。这个函数执行时,会使调用它的协程无感知地放弃执行权,由协程框架切换到其他就绪的协程继续执行。当这个函数的结果满足后,协程框架再选择合适的时机,切换回它所在的协程继续执行。
来自:05 | 协程:如何快速地实现高并发服务?
6 人划过
传输层的 TCP 协议为了保证可靠性,建立了逻辑上的连接概念,由于一个连接上只能有两方,所以 TCP 无法进行一对多通讯。而传输层的 UDP 协议无需建立连接,所以我们常用 UDP 协议发送广播。
来自:07 | 性能好,效率高的一对多通讯该如何实现?
5 人划过
接收方根据它的缓冲区,可以计算出后续能够接收多少字节的报文,这个数字叫做接收窗口。
来自:11 | 如何修改TCP缓冲区才能兼顾并发数量与传输速度?
4 人划过
字节中第 1 个比特位仅用于指示由哪些字节编码 1 个数字
来自:17 | Protobuf是如何进一步提高编码效率的?
4 人划过
如果 HTTP/2 能在一个连接上传输所有对象,那么只要客户端与服务器按照同样的规则,对首次出现的 HTTP 头部用一个数字标识,随后再传输它时只传递数字即可,这就可以实现几十倍的压缩率。所有被缓存的头部及其标识数字会构成一张表,它与已经传输过的请求有关,是动态变化的,因此被称为动态表
来自:16 | HTTP/2是怎样提升性能的?
4 人划过
自旋锁比互斥锁快得多,因为它通过 CPU 提供的 CAS 函数(全称 Compare And Swap),在用户态代码中完成加锁与解锁操作。
来自:06 | 锁:如何根据业务场景选择合适的锁?
4 人划过
这其中的秘密就是使用多个并发线程来执行 IO,这就利用了 SSD 的内部并行性。记住,多个 IO 线程对 HDD 毫无益处,因为 HDD 只有一个磁头
来自:大咖助场2|庄振运:与程序员相关的SSD性能知识
3 人划过
首先是通过缓存避免发送 HTTP 请求;其次,如果不得不发起请求,那么就得思考如何才能减少请求的个数;最后则是减少服务器响应的体积。
来自:15 | 如何提升HTTP/1.1性能?
3 人划过
*精彩内容为该课程各文章中划线次数最多的内容
编辑推荐
讲师的其他课程
包含这门课的学习路径
分布式工程师
8门课程 48.8w人学习
看过的人还看了