多线程之:并发编程面临的挑战

一:并发编程面临的挑战

(1)上下文切换问题

(2)死锁问题

(3)受限于硬件和软件资源的问题

&&注意点:并发编程的累加操作不超过百万次,多线程的执行速度要比单线程慢。因为线程有创建和上下文切换的开销。

二:如何减少上下文切换?

(1)无锁并发编程。

--->多线程竞争锁时,会引起上下文切换,所以多线程处理数据时候,可以用一些办法避免使用锁。

--->如将数据id按照hash算法取摸分段,不同线程处理不同段的数据。

(2)CAS算法

--->java的Atomic包使用了CAS算法更新数据,而不需要加锁。

(3)使用最少线程

--->避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,这样会造成大量线程都处于等待状态

(4)协程

--->在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。

三:如何避免多线程死锁?

(1)避免一个线程同时获取多个锁

(2)避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。

(3)尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制

(4)对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

四:如何解决资源限制?

(1)什么是资源限制

--->硬件资源限制有带宽的上传/下载速度。

--->硬盘的读写速度和cpu处理速度。

--->数据库的连接数和socket连接数

(2)资源限制引发的问题

--->并发编程中,将代码执行速度加快的原则是将代码中串行的部分变成并发执行。

--->由于受限于资源,所设计的并发其实仍然在串行执行,这时候程序不仅不会加快执行,反而会更慢,因为增加了上下文切换和资源调度的时间。

(3)如何解决资源限制的问题。

--->对于硬件资源限制,可以考虑使用集群并行执行程序。单机有限,多机运行。比如:集群。

--->对于软件资源的限制,可以考虑使用资源池将资源复用。比如使用连接池将数据库和socket连接复用。

--->根据不同的资源限制调整程序的并发度,比如下载文件程序依赖两个资源--带宽和硬盘的读写速度。有数据库操作时,设计数据库连接数,如果sql语句执行非常快,而线程的数量比数据库的连接数大很多,某些线程会被阻塞,等待数据库连接。

 

时间: 2024-10-24 22:24:37

多线程之:并发编程面临的挑战的相关文章

《Java并发编程的艺术》一一第1章并发编程的挑战

第1章并发编程的挑战 并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行.在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题.死锁的问题,以及受限于硬件和软件的资源限制问题,本章会介绍几种并发编程的挑战以及解决方案.

《Java并发编程的艺术》一一1.3 资源限制的挑战

1.3 资源限制的挑战 (1)什么是资源限制资源限制是指在进行并发编程时,程序的执行速度受限于计算机硬件资源或软件资源.例如,服务器的带宽只有2Mb/s,某个资源的下载速度是1Mb/s每秒,系统启动10个线程下载资源,下载速度不会变成10Mb/s,所以在进行并发编程时,要考虑这些资源的限制.硬件资源限制有带宽的上传/下载速度.硬盘读写速度和CPU的处理速度.软件资源限制有数据库的连接数和socket连接数等.(2)资源限制引发的问题在并发编程中,将代码执行速度加快的原则是将代码中串行执行的部分变

不可否认,线下传统零售正面临巨大挑战

不可否认,线下传统零售正面临巨大挑战,服饰品牌商更是在为过去几年的粗放式增长买单,高库存之痛还在继续.然而优衣库是个特例,早在2009年优衣库就通过与淘宝结盟开展电商业务.在2013年"双十一"当天,优衣库官方网络旗舰店的单日销售额突破1.2亿元,总计销售超过百万件商品,同比增长超过500%. 去年优衣库开始尝试线上与线下联动的O2O模式,通过店内广播以及收银员的提醒,向进店购物的消费者推荐自家APP,用户可下载APP上的二维码对指定商品进行打折优惠购买. 其线下店铺逆势扩张,今年新开

《Java并发编程的艺术》第一章

作者:方腾飞  本文是样章  购买本书=>  当当 京东 天猫 互动 第1章并发编程的挑战 并发编程的目的是为了让程序运行的更快,但是并不是启动更多的线程,就能让程序最大限度的并发执行.在进行并发编程时,如果希望通过多线程执行任务让程序运行的更快,会面临非常多的挑战,比如上下文切换的问题,死锁的问题,以及受限于硬件和软件的资源限制问题,本章会介绍几种并发编程的挑战,以及解决方案. 1.1     上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制

并发编程模型

原文链接 作者: Jakob Jenkov 译者: 林威建 [weakielin@gmail.com] 并发系统可以采用多种并发编程模型来实现.并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业.不同的并发模型采用不同的方式拆分作业,同时线程间的协作和交互方式也不相同.这篇并发模型教程将会较深入地介绍目前(2015年,本文撰写时间)比较流行的几种并发模型. 并发模型与分布式系统之间的相似性 本文所描述的并发模型类似于分布式系统中使用的很多体系结构.在并发系统中线程之间可以相互通信.在分

《Java并发编程的艺术》导读

前 言 为什么要写这本书 记得第一次写并发编程的文章时还是在2012年,当时花了几个星期的时间写了一篇文章<深入分析volatile的实现原理>,准备在自己的博客中发表.在同事建法的建议下,怀着试一试的心态投向了InfoQ,庆幸的是半小时后得到InfoQ主编采纳的回复,高兴之情无以言表.这也是我第一次在专业媒体上发表文章,而后在InfoQ编辑张龙的不断鼓励和支持下,我陆续在InfoQ发表了几篇与并发编程相关的文章,于是便形成了"聊聊并发"专栏.在这个专栏的写作过程中,我得到

携程酒店预订业务增速放缓正面临严峻挑战

携程作为中国在线旅游OTA的龙头老大,凭借其强大的电话 客服中心和网络销售模式,很长一段时间在酒店和机票的在线预订市场中遥遥领先于同行其他厂商.近几年,受到航空公司机票直销的影响,导致佣金比例下降,机票业务为携程的收入贡献正在逐年减弱.而利润率最为丰厚的酒店预订业务,同样正在面临严峻的挑战,受到其他OTA厂商和去哪儿.淘宝等平台的挤压,携程酒店预订业务增速放缓,酒店预订市场格局正在悄然发生变化.2008-2012年携程Q1季度酒店预订业务营收情况EnfoDesk易观智库分析认为酒店预订市场竞争日

Java并发编程相关面试问题

基础概念 1.什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)? 原子操作(atomic operation)意为"不可被中断的一个或一系列操作" .处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作. 在Java中可以通过锁和循环CAS的方式来实现原子操作. CAS操作--Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作. 原子操作是

大数据存储系统面临的挑战

随着互联网的不断扩张和云计算技术的进一步推广,海量的数据在个人.企业.研究机构等源源不断地产生.这些数据为日常生活提供了便利,信息网站可以推送用户定制的新闻,购物网站可以预先提供用户想买的物品,人们可以随时随地分享.但是如何有效.快速.可靠地存取这些日益增长的海量数据成了关键的问题.传统的存储解决方案能提供数据的可靠性和绝对的安全性,但是面对海量的数据及其各种不同的需求,传统的解决方案日益面临越来越多的问难,比如数据量的指数级增长对不断扩容的存储空间提出要求,实时分析海量的数据对存储计算能力提出