
计算机网络
文章平均质量分 94
十一很迷茫
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SRPC 框架服务端源码解析
SRPC是个轻量级、高性能、代码量很少开源的C++ RPC框架,目前在公司每天超百亿线上请求,兼具学习+使用的特点,非常适合初学者进行学习;原创 2024-01-25 21:41:39 · 1476 阅读 · 1 评论 -
C++中实现多线程和分布式
每块磁盘都有一个操作队列,多线程磁盘 IO 的一个思路是每个磁盘配一个线程,把所有针对该磁盘的 IO 都挪到同一个线程中,才可能比单线程快;(2)对于 需要写入但不需要等待响应的请求,可以使用 BlockingQueue 完成,例如 log,由一个专门的线程去写入文件,其他线程只需要往 BlockingQueue 写入即可;一个线程从 fd 收到耗时请求,并记住要把处理结果发送给 fd,但在处理过程中,fd 断开了连接,有新的连接到来,碰巧使用了相同的 fd。(3)线程池大小的阻抗匹配原则。原创 2024-01-19 15:57:26 · 1018 阅读 · 0 评论 -
muduo 网络库源码解析和使用
Muduo库是陈硕开发的Tcp网络编程库,采用了Reactor模型,非常适合网络编程初学者。出于个人学习目的阅读了其源码实现,并梳理了其中核心模块的执行流程,以及试图揣测作者一些部分的实现心得,并从中学到了很多工程实践知识,首次切实感受到多线程的种种困境;原创 2024-01-19 15:55:12 · 1598 阅读 · 0 评论 -
Linux多线程服务端编程:线程安全的对象管理
注意,构造 shard_ptr 时,使用 模板类型推导 保存了 T1 的类型(而非 T 的类型,因为 T 可能是 T1 的基类),从而可以调用其相应析构函数(即使基类的析构函数不是虚函数,详见。(2)const 成员函数中可以修改静态数据成员,不可以修改非静态成员(此处的理解是,从语义方面来讲,静态成员变量类似于全局变量,不属于某个对象,因此不算是对对象进行了修改。(1)一个对象可被多线程观察到,线程 A 调用析构函数,线程 B 调用该对象其他函数,就可能会导致意想不到的后果;原创 2023-12-27 21:00:50 · 964 阅读 · 0 评论 -
网络编程:多进程和多线程编程
初始化时,shm_lpid、shm_nattach、shm_atime、shm_dtime 设置为 0,shm_ctime 设置为当前时间;创建共享内存,所有字节都被初始化为 0,与之关联的内核数据结构为 shmid_ds 被创建和初始化;作用是创建并初始化它,会将 sem_otime 设为 0,sem_ctime 设为当前系统时间;num_sems 指定信号量集中信号量的数目;操作,会更新进程的 semadj 变量,,来跟踪进程对信号量的修改情况;创建一个新的信号量集,或者获取一个已经存在的信号量集;原创 2023-12-22 20:37:54 · 349 阅读 · 0 评论 -
网络编程:信号、定时器、Libevent
一个进程给其他进程发送信号// 成功返回 0,失败返回 -1 并设置 errno目标进程由 pid 指定pid取值含义pid > 0信号发送给 PID 为 pid 的进程pid = 0信号发送给本进程组内的其他进程pid = -1发给除 init 进程外的所有进程,发送者需要拥有对目标进程发送信号的权限pid < -1发给 PGID 为 -pid 的进程组的所有成员信号值 sig 为 0,不发送任何信号(检测目标进程或进程组是否存在,这种检测方式不可靠);原创 2023-12-22 11:30:44 · 217 阅读 · 0 评论 -
高性能服务器框架及 IO 复用
服务器同时监听多个客户请求是通过select系统调用实现的;原创 2023-12-08 21:41:45 · 927 阅读 · 0 评论 -
高级IO函数
prot 设置访问权限,取值为 PROT_READ(可读)、PROT_WRITE(可写)、PROT_EXEC(可执行)、PROT_NONE(不能被访问) 这几个值的按位或;(2)输出,默认情况下,调试信息会保持到 /var/log/debug 中,普通信息到 /var/log/messages,内核消息到 /var/log/kern.log;中 pid 为 0,表示设置当前进程的 PGID 为 pgid;,会使得调用进程成为会话的首领,会新建一个进程组,调用进程成为该组首领,调用进程将甩开终端;原创 2023-12-08 10:07:19 · 118 阅读 · 0 评论 -
TCP 选项
在高速网络中,32 位序列号很容易使用完然后又从 0 开始,假设前面第一个 32 位序列号范围内的某个报文段丢失重传,但第二个 32 位序列号范围内的已经开始传输,接收方可能就无法区分接收到的报文段是属于重传的还是第二个范围内的,此时通过发送时间戳可以进行区分,因此接收者可以将时间戳看作一个 32 位的扩展序列号;主动连接的一方发送了一个非 0 的比例因子但没有收到对方的窗口缩放选项,会将自己发送与接收的比例因子都设为 0;三次握手的目的:交互初始序列号(ISN),利用数据包的选项承载特殊信息;原创 2023-12-07 15:33:15 · 399 阅读 · 0 评论 -
网络编程基础api
系统调用进入 LISTEN 状态,监听到某个连接请求时(收到 SYN),将该连接放入内核等待队列,发送 SYN + ACK,收到 ACK 后,进入 ESTABLISHED 状态;一个每个分片都有自己的 IP 头部,它们都具有相同的标识值,有不同的片偏移(数据部分的长度必须是 8 的整数倍),除了最后一个分片外,其他分片都设置 MF 标志;(2)type 指定服务类型,SOCK_STREAM(流服务)和 SOCK_UGRAM(数据报)对 TCP/IP 而言,前者表示使用 TCP,后者为 UDP;原创 2023-12-07 15:32:12 · 1370 阅读 · 0 评论 -
CS144 lab
接收到一个Substring后,将还未缓存的字节写入该类String(也可以简单粗暴的重新全部写入一遍,较好的方法是找到在map中的最后一个小于该区间左端索引(第一个>=该值的前一个),第一个>=右端索引之间的区间,遍历时遇到这些区间之间跳过,可直接使用lower_bound),再加入map中(在放入之前map中的集合是不重叠的)。因为发送完某个Seg后其可能为0,但接收方并未接收时,接收方真正窗口大小并未减小为0,此时仍可以重传,RTO需要加倍,同时维护连续重传数量。窗口若满,则不将FIN标志加入其中。原创 2023-02-28 09:22:58 · 439 阅读 · 0 评论 -
计算机网络五层架构及基础知识
传输层:TCP、UDP;完成报文之间的交互(提供可靠服务)服务访问点(SAP):下层服务提供者区分不同上层用户的信息。是下层在SAP上通过原语(提供服务的形式)向上层提供服务。在第n层时加上头部(n-header),变成n-PDU(网络层:IP(转发协议);通过层间接口需要加上接口控制信息(ICI)物理层:将数据帧与物理信号之间转换。SDU是上层提供的数据单元。之间传输以帧为单位的数据。原创 2023-01-31 18:35:35 · 2779 阅读 · 0 评论