《linux多线程服务端编程》---- Part 1 C++多线程系统编程(1)

本文介绍了Linux多线程服务端编程,包括线程安全的对象生命周期管理,强调了shared_ptr和weak_ptr的使用,以及线程同步的互斥器和条件变量。探讨了不同多线程服务器编程模型,如单线程服务器和多线程服务器,以及线程池的阻抗匹配问题。
摘要由CSDN通过智能技术生成

Chapter 1 线程安全的对象生命期管理

综述:

线程安全:

对象的创建:

一个函数如果要锁住相同类型的多个对象,为保证始终按照相同的顺序加锁,可以比较mutex对象的地址,始终先加锁地址较小的mutex。

shared_ptr/weak_ptr

shared_ptr技术与陷阱

 意外延长对象的生命周期

小结

(1)原始指针暴露给多个线程往往会造成race condition

(2)统一用shared_ptr来管理对象的生命期。

(3)shared_ptr是值语义,当心意外延长对象的生命期,例如boost::bind和容器都可能会拷贝shared_ptr

(4)weak_ptr是shared_ptr的好帮手,可以用作弱回调。

Chapter 2 线程同步精要

并发编程的2种模型:message passing/shared memory。前者使用范围更广。

线程同步四项原则

互斥器(mutex)

条件变量(condition variable)

不要用读写锁和信号量

 

sleep不是同步原语

它不具备memory barrier语义,无法保证内存可见性

Chapter 3 多线程服务器的适用场合与常用编程模型

进程与线程

非阻塞IO+IO复用(单线程服务器)

多线程服务器常用编程模型

one loop per thread

程序中的每个IO线程都有一个event loop(reactor),用于处理读写和定时事件(周期或单次)

对于没有IO只有计算任务的线程,使用event loop有点浪费,可以使用blocking queue实现的任务队列。

进程间通信只用TCP

TCP是双向的。

TCP port由进程独占,且操作系统会自动回收。

TCP可记录可重现,还可以跨语言。

TCP连接是可再生的。

分布式系统中推荐使用TCP长连接通信

多线程服务器适用场合

必须用单线程场合

 

对于一些辅助性程序,如果必须和主要服务器进程运行在同一台机器,那么把它做成单线程可以避免过分抢占系统计算资源。

缺点:

适用多线程的场景

多线程服务程序中线程的分类

问题解答

1 Linux可以同时启动多少个线程

2 多线程可以提升并发度吗?

3 线程池大小的阻抗匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值