- 博客(83)
- 收藏
- 关注
原创 TCP相关问题的解决
摘要:TCP协议采用三次握手建立连接,主要防止网络延迟导致的旧报文错误建立连接。通过类比电话通话场景,解释了两次握手会导致资源浪费,而三次握手能确保连接可靠性。TCP四次挥手则因全双工特性需要双方各自确认关闭。滑动窗口机制通过批量发送提高效率,配合SACK和快速重传解决丢包问题。流量控制防止接收方过载,拥塞控制则通过慢启动、拥塞避免等策略应对网络拥堵。TCP黏包问题源于其流式协议特性,需应用层自行处理消息边界。这些机制共同保障了TCP的可靠传输和高效性能。
2025-12-23 19:35:22
1056
1
原创 TCP和UDP
TCP和UDP是两种核心传输协议。TCP通过三次握手建立可靠连接,确保数据有序完整传输,适用于网页浏览、文件传输等场景。UDP无连接、不可靠但高效,适合实时性要求高的视频会议、在线游戏等应用。
2025-12-23 19:34:00
126
原创 网络中数据传输的具体过程
数据在网络传输过程中经历了层层封装与解封装。从应用层生成原始数据开始,依次经过传输层(添加TCP/UDP头)、网络层(添加IP头)和数据链路层(添加MAC头)的封装。关键步骤包括路由决策确定下一跳、ARP解析获取MAC地址。路由器转发时会替换MAC地址但保留IP地址。最终目标主机通过反向解封装,将数据逐层递交给对应端口的应用程序。整个过程展现了网络协议栈各层的分工协作,确保数据准确送达目标进程。
2025-12-21 16:20:52
968
原创 IO重定向
本文详细解析了Linux文件重定向的实现原理。首先通过最小分配原则手动实现重定向,即关闭stdout后打开新文件,使新文件获得fd1。
2025-12-18 21:37:10
762
原创 linux系统IO
本文深入解析Linux文件操作原理,重点探讨系统调用与文件描述符机制。首先阐述文件的本质是内容+属性,指出文件操作实质是进程与OS的交互。
2025-12-18 21:34:25
997
原创 Linux信号量
信号量是解决多进程临界资源竞争问题的同步机制。其核心是PV原语:P操作用于申请资源(原子减1),若结果≥0则成功,否则阻塞;V操作用于释放资源(原子加1),若结果≤0则唤醒等待进程。
2025-12-17 21:13:21
239
原创 进程间通信--共享内存
Linux共享内存使用SystemV接口的四个关键步骤:创建(shmget)、关联(shmat)、使用、去关联(shmdt)和删除(shmctl)。
2025-12-17 21:02:28
778
原创 进程间通信--命名管道
摘要:本文介绍了Linux系统中命名管道(FIFO)的原理与应用。命名管道通过在磁盘创建特殊文件(p类型)实现跨进程通信,数据仍在内核内存中流动。
2025-12-16 20:57:45
741
原创 进程间通信--匿名管道
本文介绍了进程间通信(IPC)的核心机制,重点解析了匿名管道的工作原理。。这些特性体现了管道自带的同步机制,是理解进程间通信的重要基础。
2025-12-16 20:56:09
743
原创 进程优先级和切换
本文摘要:Linux系统通过进程优先级(PRI/NI)实现CPU资源分配,其中NI值(-20到19)用于动态调整PRI。进程切换时通过保存/恢复寄存器数据实现上下文保存。
2025-12-15 20:54:03
1270
原创 C++自旋锁
自旋锁是一种非阻塞锁机制,当线程获取锁失败时会持续循环检查(忙等待),而不是挂起线程。相比互斥锁,自旋锁避免了上下文切换的开销(3-10微秒),适用于锁持有时间极短(如0.01微秒)的场景。
2025-12-11 20:25:40
1014
原创 package_task
std::packaged_task是C++标准库中的任务封装工具,用于将可调用对象(函数、Lambda等)包装为可异步执行的任务,并自动将结果关联到std::future对象。
2025-12-10 18:23:04
407
原创 future、promise
C++11引入了std::future和std::async简化异步编程。std::async像网购下单,启动异步任务并返回std::future对象;std::future则如取件码,用于获取结果。
2025-12-10 18:22:00
994
原创 C++中的atomic
std::atomic是C++多线程编程中实现无锁操作的核心机制,通过硬件级原子指令保证线程安全。文章介绍了原子操作的必要性、基础用法、核心API以及关键的CAS操作原理。
2025-12-09 17:18:38
624
原创 C++中的mutex、condition_val
C++中的锁机制分为互斥量(Mutex)和锁管理类(Lock Managers)。互斥量包括std::mutex(基本互斥锁)、std::recursive_mutex(递归锁)、std::timed_mutex(超时锁)和std::shared_mutex(读写锁)。
2025-12-09 17:16:12
732
原创 C++中的thread
C++ 的多线程支持是从 C++11 标准开始引入的,标准库提供了 <thread> 头文件,使得多线程编程变得跨平台且更加简便。
2025-12-08 20:19:17
1155
原创 ref关键字
std::ref是C++标准库中的引用包装器,用于在std::thread等场景中传递变量的引用而非副本。由于std::thread默认会拷贝参数,使用std::ref可以确保线程函数操作原始变量而非临时副本。
2025-12-08 20:16:29
149
原创 C++智能指针(RAII思想)
RAII(资源获取即初始化)是C++的核心编程范式,通过对象生命周期管理资源(内存、文件等)。智能指针(unique_ptr、shared_ptr、weak_ptr)是RAII的典型实现:unique_ptr独占资源且零开销;shared_ptr共享资源但需维护引用计数;weak_ptr解决循环引用问题。
2025-12-07 10:42:41
945
原创 C++的异常处理
C++异常处理基于throw、try和catch三个关键字,通过抛出、捕获异常实现错误处理。最佳实践包括按引用捕获异常、遵循RAII原则确保资源安全释放,以及避免在析构函数中抛出异常。
2025-12-07 10:39:40
565
原创 C++中的bind
本文介绍了C++中的std::bind函数适配器,它能预先固定函数的部分参数并生成新函数对象。文章详细讲解了占位符(_1,_2等)的使用方法,并通过减法函数示例演示了参数固定、顺序重排等场景。
2025-12-06 09:52:47
381
原创 C++中的function
std::function是C++中统一包装各类可调用对象(函数指针、Lambda、仿函数等)的模板类,通过类型擦除实现接口统一。
2025-12-06 09:51:13
323
原创 C++的lambda表达式
本文介绍了C++ Lambda表达式的基本语法和关键特性。最后警示了悬空引用的致命陷阱,即当Lambda生命周期超过捕获变量时会导致未定义行为,建议在这种情况使用值捕获。
2025-12-05 11:25:22
682
原创 万能引用、完美转发
万能引用(T&&)需满足类型推导和严格格式两个条件,完美转发利用std::forward保留参数的原始值类别,解决了中间层函数参数退化为左值的问题。
2025-12-04 16:11:43
587
原创 左值右值、移动拷贝
本文介绍了C++中的左值/右值概念及其应用。编译器优化包括移动语义兜底和返回值优化,可避免不必要的拷贝操作。这些特性共同解决了C++中临时对象处理效率低下的问题。
2025-12-04 16:07:56
1150
原创 泛型编程的差异抽象思想
本文介绍了通过模板参数实现迭代器代码复用的技巧。在实现iterator和const_iterator时,传统方法需要编写两个几乎相同的类。通过引入Ref和Ptr两个额外模板参数,将返回值类型差异抽象为参数,可以复用同一份代码模板。
2025-12-03 21:54:40
707
原创 C++运算符->的特殊
本文探讨了C++中operator->运算符重载的特殊行为。当通过迭代器访问成员时,编译器会自动执行两步操作:首先调用重载的operator->()函数获取指针,然后对该指针再次应用原生->运算符访问成员。
2025-12-03 21:39:18
314
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅