美文网首页
并发 - 并发编程的挑战

并发 - 并发编程的挑战

作者: 康俊1024 | 来源:发表于2019-03-04 16:28 被阅读0次

一、概述

并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战。

二、挑战

上下文切换

上下文切换会影响多线程的执行速度,可以通过vmstat命令测量上下文切换次数,CS(Content Switch)表示上下文切换的次数。
解决方法:
①无锁并发编程:多线程竞争锁时,会引起上下文切换,所以多线程处理数据时可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。
②CAS算法:Java的Atomic包使用CAS算法来更新数据,而不需要加锁。
③使用最少线程:避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,这样就会造成大量线程都处于等待状态,造成资源浪费。
④协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。

死锁

解决方法:
①避免一个线程同时获取多个锁。
②避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。
③尝试使用定时锁,使用lock.tryLock(timeout)来代替使用内部锁机制。
④对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

资源限制的挑战

资源限制分计算机硬件的资源限制和软件的资源限制。
①硬件资源限制有宽带的上传/下载速度、硬盘读写速度和CPU的处理速度(带宽、磁盘IO、CPU处理速度)。
②软件资源限制有数据库的连接数和socket连接数等。引发的问题以及解决:硬件集群、资源复用连接,调用对方webservice接口时,只建立一个连接。调整程序的并发度

相关文章

网友评论

      本文标题:并发 - 并发编程的挑战

      本文链接:https://www.haomeiwen.com/subject/mcuiuqtx.html