1. 并发编程的挑战

多线程面临的挑战:上下文切换的问题、死锁、受限于硬件和软件的资源限制问题;

上下文切换

单个CPU通过分配时间片实现多线程并发,一个CPU时间片大概几十毫秒;

一次上下文切换:CPU分配时间片切换任务时需要保存上一个任务的状态,线程任务的保存和重新加载的过程即是一次上下文切换;

多线程不一定快:因为有上下文切换、线程创建、资源调度的开销;

测试上下文切换次数和时长:Lmbench3、Linux自带的vmstat命令;

减少上下文切换:无锁并发(减少锁的竞争);CAS算法;使用最少的线程;使用协程(单线程自己实现多任务调度和切换);

死锁

避免死锁的方法:

1. 避免一个线程获取多把锁;

2. 避免一个线程在一把锁内获取多个资源,每把锁只占用一个资源;3

3. 使用定时锁代替内部锁机制:lock.tryLock(timeout);

资源限制

硬件资源限制:如带宽(影响上传下载)、IO速度、CPU速度等;解决:集群;

软件资源限制:数据库连接数、Socket连接数、文件句柄;解决:连接池复用连接、单连接、限制连接数;

如何解决:根据不同资源限制调整并发参数;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容