- 博客(375)
- 资源 (12)
- 收藏
- 关注
原创 线程执行顺序控制
方法原理优点缺点join()主线程主动等待线程结束简单、适合主控线程不适合异步启动 T3join()in T3T3 内部等待 T1、T2 完成控制灵活线程间传引用复杂信号量控制信号量顺序适合多线程同步代码逻辑较为底层条件变量条件通知 + 计数器控制精确控制、系统效率高实现略复杂互斥锁组合锁释放触发条件可行性低不推荐,逻辑易出错😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-13 11:05:37
317
原创 用户级线程和内核级线程的区别
对比维度用户线程(ULT)内核线程(KLT)是否依赖内核否,完全在用户空间是,由操作系统内核管理切换效率高,不需要陷入内核低,需进行系统调用并行能力差,多核系统中仍在单核上执行强,支持多线程在多个核上并行执行阻塞影响一个线程阻塞,整个进程挂起一个线程阻塞,不影响其他线程使用资源少,线程开销小多,内核需维护每个线程上下文应用场景高并发、计算密集型、需要大量线程时使用高可靠性、多核并行、需操作系统调度时使用。
2025-06-13 11:04:54
240
原创 常见的锁机制
/ 保护读者数量mutex wmtx;// 写者互斥锁int rcnt;// 当前读者数量锁类型是否睡眠等待适合场景并发粒度说明互斥锁是通用互斥严格串行系统调度开销较大条件变量是状态通知等待通知唤醒通常配合互斥锁使用自旋锁否锁时间极短忙等待高性能但可能浪费 CPU读写锁否(可自旋)读多写少读共享、写互斥提升读并发效率实际开发中,锁的选择要根据临界区持有时长访问频率和系统资源。
2025-06-13 10:42:09
352
原创 信号量的作用及其原理
信号量是高并发场景下常用的同步工具,可灵活控制资源数量与线程调度流程。其解耦能力强,适合复杂多线程通信场景。而互斥量更适合用来保护单一临界资源。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-13 10:37:44
264
原创 互斥锁与条件变量
同步原语功能是否阻塞典型场景互斥锁 mutex保证同一时间只有一个线程访问资源是临界区保护条件变量 cond控制线程等待某个条件并被通知唤醒是任务队列、信号同步通过对互斥锁与条件变量的封装,可以提高线程同步代码的可读性和可维护性,在实际开发中属于多线程同步的基础设施。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-13 10:37:05
143
原创 常见的进程和线程调度算法
调度算法是否抢占适合任务公平性响应性调度开销饥饿风险FIFO否相似长度任务高差低有SJF/SRTSRT 抢占短任务低高高高(长任务)RR是I/O 密集或平均任务高一般高无Max-Min是多资源竞争高一般高无MFQ是通用场景高高中无这些调度算法各有侧重。现代操作系统通常采用多级反馈队列结合动态负载均衡策略,并根据不同任务(计算型、I/O型)灵活调度,以提高整体系统性能与响应能力。
2025-06-12 14:32:12
387
原创 常见的进程调度算法
调度算法是否抢占是否公平是否考虑任务长度是否考虑等待时间饥饿可能性适用系统FCFS否否否否有批处理系统SJF否否是否有预测执行时间明确的系统HRRF否部分是是少多任务批处理系统SRT是否是否有实时性较高系统RR是是否否无分时系统MLFQ是是是(间接)是(间接)低通用调度😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-12 12:42:14
308
原创 线程安全问题分类以及注意场景
问题类型关键表现常见场景解决方式数据竞争结果不正确++、-- 等加锁、原子操作初始化问题空指针、未定义行为单例、全局变量延迟安全初始化活跃性问题程序卡死或执行不前死锁、活锁、饥饿控制锁顺序、优先级😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-12 12:40:06
117
原创 什么是线程安全
当多个线程访问一个对象时,不需要额外的同步控制(如加锁、条件变量等),也不会出现竞态条件,这样的对象或函数就被称为线程安全的。反之,如果多个线程并发访问同一个对象时可能会产生数据竞争(data race),则该对象或函数是线程不安全的。对比项线程安全线程不安全数据一致性能保证并发下数据正确性存在竞态,数据可能错误编码复杂度需要加锁、同步处理编码简单性能表现存在线程间互斥,可能略低无锁开销,性能好但风险大适用场景高并发场景、关键资源保护临时数据、局部变量处理等场景。
2025-06-12 12:38:18
111
原创 多进程和多线程的区别
面试官提问:请简要说明多进程和多线程的区别,什么时候该使用多线程,什么时候该使用多进程?应聘者参考回答:多进程和多线程是并发编程中常见的两种方式,它们各有优缺点,适用于不同的应用场景。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-11 14:46:17
249
原创 共享内存是什么
共享内存是一种速度最快的进程通信方式,但使用者必须自己处理访问控制和同步问题。进程间共享缓存多媒体数据交换高速日志共享在实际工程中,通常共享内存 + 信号量/锁机制组合使用,构建高效、安全的进程间通信方案。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-11 14:45:45
402
原创 系统并发和并行
并发强调任务管理能力:多个任务在系统中交错存在,由操作系统调度运行;并行强调执行效率提升:多个任务物理上在多个处理单元中并行推进;操作系统通过进程、线程机制实现并发;系统硬件架构决定能否并行。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-11 14:44:51
278
原创 并行和并发
概念定义并发多个任务在同一时间段交替执行(宏观同时)并行多个任务在同一时刻物理同时执行(微观同时)类比方式并发并行概念管理多个任务执行多个任务时间关系看似同时,实际交替真正同时系统需求可在单核实现需多核或多处理器编程目标提高吞吐/响应提高执行速度(加速)
2025-06-11 14:43:54
224
原创 服务端怎么实现并发
特性多线程模型I/O 多路复用模型并发方式每连接一个线程一个线程处理多个连接系统资源消耗高,线程数量大,频繁切换低,少量线程可支撑大量连接编程复杂度低高适合场景中低并发、业务处理耗时较长高并发、IO 密集型服务举例简单聊天室服务Web服务器、消息网关、IM长连接等😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-11 14:43:22
276
原创 生产者消费者模型
单生产者单消费者模型的核心是互斥访问缓冲区 + 条件同步控制流程缓冲区满时写入(阻止生产者);缓冲区空时读取(阻止消费者);这使得线程间通信既高效又安全,且不会出现死锁或竞争条件。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-10 14:48:39
340
原创 进程的五种状态
通过五态或七态模型,操作系统可以高效地管理 CPU 和系统资源分配,使进程执行具备良好的调度性和响应性。进程调度器在这其中扮演关键角色,确保系统公平、高效运行。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-10 14:47:04
395
原创 epoll的优点
优点说明并发能力强支持数万甚至数十万连接,无硬性 FD 数量限制性能稳定活跃触发模式,性能不随连接数增长而下降系统开销低使用 mmap 减少用户态与内核态之间的数据复制因此,epoll是现代高性能网络服务器(如 Nginx、Redis)广泛采用的 I/O 模型。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-10 14:45:56
170
原创 线程池实现原理
线程池调度任务的过程体现了**“能用核心线程就用核心线程,不能就排队,排不下就扩容线程,再不行就拒绝”**的思想。这样既能保障性能,也能避免资源滥用。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-10 14:39:38
169
原创 线程池有哪些优点
面试官提问:请简要说明使用线程池有哪些优点?应聘者参考回答:线程池是一种用于管理大量线程的机制,其核心思想是提前创建一定数量的线程,在任务到来时复用这些线程进行处理,从而避免频繁创建和销毁线程。
2025-06-10 14:38:23
104
原创 TCP 中的半开连接和半关连接
半开连接指的是TCP 一端已关闭或异常断开,而另一端仍然保持 ESTABLISHED 状态。一端主机突然断电或网络中断,未发送 FIN 通知对端;对端仍以为连接正常存在,可能继续发送数据;一旦对端尝试发送数据,会收到 RST 响应,标识连接异常中断;会导致 TCP 资源泄露或连接假死现象;通常由TCP Keepalive 检测机制来发现并清理。TCP 半关连接指一方调用shutdown()或发送 FIN 关闭一个方向的数据传输,而另一方仍可单向传输数据。例如:客户端调用。
2025-06-09 15:51:50
592
原创 close()与 shutdown()区别
如果你希望只关闭某个方向的数据传输而继续保持连接,应使用shutdown();如果需要彻底释放连接资源,则使用close();先shutdown()→ 再read()→ 最后close()😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-09 15:50:56
392
原创 fork()之后的资源
需要注意的是,虽然一些资源在物理内存上可能最初是共享的(例如通过写时复制 Copy-On-Write 技术),但逻辑上仍被视为不共享。会创建一个子进程,该子进程是父进程的副本,但并不是所有资源都共享。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。之后,父子进程之间哪些资源是共享的,哪些资源是独有的?**应聘者参考回答:**在 Linux 系统中,调用。**面试官提问:**请问在调用。
2025-06-09 15:49:37
134
原创 在程序中创建一个新线程
*面试官提问:**请问如何在一个程序中创建一个新线程?请分别说明在 Linux 和 Windows 下的实现方式。在 Linux 中,通常使用 POSIX 线程库(pthread)来创建线程。由于 pthread 不是 Linux 默认链接的库,所以编译时需要显式地添加。这两种方式都可以实现线程的创建,只是 API 接口和使用方式略有差异。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。该函数定义在 Windows API 中。在 Windows 系统中,可以使用。
2025-06-09 15:49:08
167
原创 同步IO与异步IO
对比项同步 IO异步 IO函数返回时机IO 完成后返回IO 提交后立即返回线程是否阻塞阻塞非阻塞并发能力差(需多线程)高(单线程可发起多个 IO)使用复杂度简单复杂(需事件通知或回调)典型场景控制流清晰,性能要求不高高并发网络通信、服务器后端等😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-06 11:07:52
117
原创 生产者消费者模型
优点说明解耦生产者和消费者通过交易场所间接通信支持并发多生产者/消费者可以并发执行支持忙闲不均队列缓冲机制支持速率差异若需精细控制线程行为,建议使用信号量方案;若需结构清晰、易维护,优先选择互斥锁 + 条件变量方式;在支持语言中(如 Java),可直接利用管程/锁机制实现。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-06 11:05:36
233
原创 多线程 vs 多进程
项目中如何选择使用多进程还是多线程?分别适用于哪些场景?请简要说明你对两者适用性的理解。选择多进程还是多线程,取决于等多方面因素。
2025-06-05 22:06:43
286
原创 常见线程锁及其应用场景
不同类型的锁适用于不同的并发访问场景,合理选择加锁机制,既能保证线程安全,又能最大程度提高程序性能。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-05 22:06:12
197
原创 线程数如何设置
任务类型特点说明推荐线程数CPU 密集型计算为主、无 I/O 阻塞CPU 核心数 + 1I/O 密集型阻塞为主、I/O 多、计算少通常为核心数的 2~4 倍甚至更多线程数量的合理配置应考虑任务特征(CPU 还是 I/O 密集)、CPU 核心数、线程执行周期中计算与等待的比例。使用线程池并动态调整线程数是一种更高效的方式。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-05 22:05:01
211
原创 信号量和互斥锁的区别
互斥锁更像是“钥匙”,只有持有钥匙的线程才能进入。信号量更像是“计数器”,允许多个线程依据计数进行同步调度。合理选择同步机制是确保并发程序正确性和高性能的关键。互斥锁适合保护单一资源的访问,信号量适用于资源配额控制或线程同步协作。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-05 22:03:10
252
原创 线程间通讯方式
通信方式Linux支持Windows支持适用场景互斥锁是是(等)基本互斥控制条件变量是是(需封装)线程等待某条件发生信号量是是(控制资源数量消息机制否是线程间异步通知全局变量是是简单共享,需同步保护CEvent对象否是(MFC专有)多线程同步选择通信方式要结合线程的同步需求资源共享程度以及操作系统平台特性进行合理搭配。多数情况下,Linux 更偏向底层控制,Windows 更偏向事件驱动与消息机制。
2025-06-05 22:01:13
268
原创 线程同步的常见方式
同步方式是否支持跨进程控制粒度特点与使用场景互斥锁仅线程间独占访问快速、适合互斥访问,线程内常用条件变量仅线程间状态通知搭配互斥锁,适合等待条件满足信号量支持计数控制适合并发访问控制(如限流)事件机制平台相关(如Win)通知机制适合任务阶段同步,线程通信临界区仅线程间轻量互斥性能好但仅限单进程内部合理选择线程同步机制是高并发程序性能与安全性的保障,需根据访问控制需求、进程/线程边界、资源数量等因素综合考虑。
2025-06-04 15:17:52
372
原创 线程共享的资源
线程在提高程序并发性的同时,也引入了共享资源访问的同步问题。掌握共享与独享资源的边界,是编写安全高效多线程程序的基础。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-04 15:17:03
263
原创 进程与线程联系与区别
线程是进程的组成部分,二者相辅相成;在现代操作系统中,多线程被广泛应用以提高程序并发度与响应速度;开发中需注意线程同步与资源共享冲突问题,避免数据竞争。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-04 15:16:30
247
原创 冯诺依曼结构
冯诺依曼结构强调程序和数据的统一存储;指令逐条顺序执行(除非有跳转);现代计算机已在此基础上发展出更复杂的体系结构,但仍遵循其基本模型。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-04 15:15:43
194
原创 Linux 中进程与线程的最大数量及其限制因素
类型理论上限决定因素进程数默认 32768pid_max,系统资源,内核调度能力单进程线程数约 300(32 位)用户态虚拟空间、线程栈大小、ulimit 限制64 位系统由于地址空间更大(理论上 2⁶⁴),可创建更多线程,远高于 32 位系统。😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
2025-06-04 15:14:57
242
C++ Hook DirectX 11的内部Imgui绘制的框架封装C++ Hook DirectX 11的内部Imgui绘制的
2022-10-07
C++ 面向对象实现的雷霆战机游戏,带音乐 ,主角带动态特效。完整源码 EasyX
2022-07-28
MFC 标签页 TabSheet.h TabSheet.cpp
2022-07-19
Inject.exe
2020-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人