4.8多线程
多线程的意义
有CPU密集型任务
有IO密集型操作
想并发处理多个客户端请求
多线程的本质作用:
让程序能同时做多件事(并发),提高执行效率或响应速度。
多线程 = 多个执行单位并行/伪并行工作
加锁 = 在共享数据访问时防止互相干扰
不共享 = 不加锁,快乐做自己
4核8线程 = 真正能并行执行的线程数最多是8,但性能受限于共享资源,不能简单理解成“8核”那么猛。
void worker(int id) {
int localCounter = 0; // 每个线程独立变量,线程安全
for (int i = 0; i < 100000; ++i) {
++localCounter;
}
std::cout << "Thread " << id << " done." << std::endl;
}
localCounter 是线程私有变量,保存在各自栈内存中,不存在竞争。
不需要同步机制,线程安全。
int sharedCounter = 0;
void worker() {
for (int i = 0; i < 100000; ++i) {
++sharedCounter; // 共享变量写操作,存在数据竞争
}
}
多个线程并发修改 sharedCounter,操作非原子,易导致数据竞争。
需加锁或使用原子类型保证安全。
非原子操作 = 会被中断、线程可能踩脚
原子操作 = 一次完成、线程抢不到
c++小白,请多指教