当前位置: 首页 > news >正文

网站开发到上线 多久河南科兴建设有限公司网站

网站开发到上线 多久,河南科兴建设有限公司网站,网站做标签,怎么建正规网站并发编程的目的是为了让程序运行得更快#xff0c;但是#xff0c;并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时#xff0c;如果希望通过多线程执行任务让程序运行得更快#xff0c;会面临非常多的挑战#xff0c;比如上下文切换的问题、死锁的问…并发编程的目的是为了让程序运行得更快但是并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时如果希望通过多线程执行任务让程序运行得更快会面临非常多的挑战比如上下文切换的问题、死锁的问题以及受限于硬件和软件的资源限制问题本章会介绍几种并发编程的挑战以及解决方案。上下文切换即使是单核处理器也支持多线程执行代码, CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间因为时间片非常短所以ICPU通过不停地切换线程执行让我们感觉多个线程是同时执行的时间片一般是几十毫秒(ms)。CPU通过时间片分配算法来循环执行任务当前任务执行-一个时间片后会切换到下一个任务。但是在切换前会保存上一个任务的状态以便下次切换回这个任务时可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。这就像我们同时读两本书,当我们在读一本英文的技术书时发现某个单词不认识于是便打开中英文字典但是在放下英文技术书之前大脑必须先记住这本书读到了多少页的第多少行等查完单词之后能够继续读这本书。这样的切换是会影响读书效率的同样上下文切换也会影响多线程的执行速度。多线程一定快吗下面的代码演示串行和并发执行并累加操作的时间请分析:下面的代码并发执行一定比串行执行快吗?上述问题的答案是“不一定”测试结果如表所示。从表中可以发现当并发执行累加操作不超过百万次时速度会比串行执行累加操作要慢。那么为什么并发执行的速度会比串行慢呢?这是因为线程有创建和上下文切换的开销。测试上下文切换次数和时长下面我们来看看有什么工具可以度量上下文切换带来的消耗。使用I mbench31I可以测量上下文切换的时长。使用vmstat可以测量上下文切换的次数。Imbench3是一个性能分析工具。.下面是利用vmstat测量上下文切换次数的示例。CS(Content Switch)表示上下文切换的次数从上面的测试结果中我们可以看到上下文每1秒切换1000多次。如何减少上下文切换减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。无锁并发编程。多线程竞争锁时会引起上下文切换所以多线程处理数据时可以用一些办法来避免使用锁如将数据的ID按照Hash算法取模分段不同的线程处理不同段的数据。CAS算法Java的Atomic包使用CAS算法来更新数据而不需要加锁。使用最少线程避免创建不需要的线程.比如任务很少但是创建了很多线程来处理这样会造成大量线程都处于等待状态。协程在单线程里实现多任务的调度并在单线程里维持多个任务间的切换。减少上下文切换实战本节将通过减少线上大量WAITING的线程来减少上下文切换次数。第一步用jstack命令dump线程信息看看pid为3117的进程里的线程都在做什么。第二步:统计所有线程分别处于什么状态发现300多个线程处于WAITING(onobject-monitor)状态。第三步:打开dump文件查看处于WAITING(onobjectmonitor)的线程在做什么。发现这些线程基本全是JBOSS的工作线程在await。说明JBOSS线程池里线程接收到的任务太少大量线程都闲着。第四步减少JBOSS的工作线程数,找到JBOSS的线程池配置信息,将maxThreads降到100。第五步:重启JBOSS再dump线程信息然后统计WAITING(onobjectmonitor)的线程发现减少了175个。WAITING的线程少了系统上下文切换的次数就会少因为每次从WATTTING到RUNNABLE都会进行一 次上下文的切换。读者也可以使用vmstat命令测试一 下。死锁锁是个非常有用的工具运用场景非常多因为它使用起来非常简单而且易于理解。但同时它也会带来-些困扰那就是可能会引起死锁一旦产生死锁就会造成系统功能不可用。让我们先来看一段代码这段代码会引起死锁。使线程t1和线程2互相等待对方释放锁。这段代码只是演示死锁的场景在现实中你可能不会写出这样的代码。但是在一些更为复杂的场景中你可能会遇到这样的问题比如t1拿到锁之后因为一些异常情况没有释放锁(死循环)。又或者是t1拿到一个数据库锁,释放锁的时候抛出了异常没释放掉。一旦出现死锁业务是可感知的因为不能继续提供服务了那么只能通过dump线程查看到底是哪个线程出现了问题以下线程信息告诉我们是DeadI ockDemo类的第42行和第31行引起的死锁。现在我们介绍避免死锁的几个常见方法。避免一个线程同时获取多个锁。避免一个线程在锁内同时占用多个资源尽量保证每个锁只占用一个资源。尝试使用定时锁使用lock.tryLock(imeout)来替代使用内部锁机制。对于数据库锁加锁和解锁必须在一个数据库连接里否则会出现解锁失败的情况。资源限制的挑战(1)什么是资源限制资源限制是指在进行并发编程时程序的执行速度受限于计算机硬件资源或软件资源。例如服务器的带宽只有2Mb/s某个资源的下载速度是1Ml/s每秒系统启动10个线程下载资源下载速度不会变成10Mb/s所以在进行并发编程时要考虑这些资源的限制。硬件资源限制有带宽的上传/下载速度、硬盘读写速度和CPU的处理速度。软件资源限制有数据库的连接数和socket连接数等。(2)资源限制引发的问题在并发编程中将代码执行速度加快的原则是将代码中串行执行的部分变成并发执行但是如果将某段串行的代码并发执行因为受限于资源仍然在串行执行这时候程序不仅不会加快执行反而会更慢因为增加了上下文切换和资源调度的时间。例如之前看到一段程序使用多线程在办公网并发地下载和处理数据时导致CPU利用率达到100% 几个小时都不能运行完成任务。后来修改成单线程一个小时就执行完成了。(3)如何解决资源限制的问题对于硬件资源限制可以考虑使用集群并行执行程序。既然单机的资源有限制那么就让程序在多机上运行。比如使用ODPS、Hadoop或者自己搭建服务器集群不同的机器处理不同的数据。可以通过“数据ID%机器数计算得到一个机器编号然后由对应编号的机器处理这笔数据。如何在资源限制的情况下让程序执行得更快呢?方法就是根据不同的资源限制调整程序的并发度比如下载文件程序依赖于两个资源带宽和硬盘读写速度。有数据库操作时,涉及数据库连接数如果SQL语句执行非常快而线程的数量比数据库连接数大很多则某些线程会被阻塞,等待数据库连接。总结以上介绍了在进行并发编程时,大家可能会遇到的几个挑战并给出了一些解决建议。有的并发程序写得不严谨在并发下如果出现问题定位起来会比较耗时和棘手。所以,对于Java开发工程师而言,笔者强烈建议多使用JDK并发包提供的并发容器和工具类来解决并发问题因为这些类都已经通过了充分的测试和优化,均可解决了本章提到的几个挑战。当然这些只是Java并发编程的冰山一角完整的知识我已经整理成了一份文档。需要的转发文章关注私信“文档”获得领取方式。
http://www.yutouwan.com/news/114892/

相关文章:

  • 重庆品牌营销型网站建设定西临洮网站建设
  • 网站制作的流程是什么企业专业搜索引擎优化
  • 可以做视频的一个网站建网站的网络公司的名称以及服务
  • 优设网站怎么下载软件下载网站如何履行安全管理义务确保提供的软件
  • 做钓鱼网站原理报考二级建造师证需要什么条件
  • wordpress图片缩略图黑帽seo工具
  • 手机访问网站 自动缩放宁德网站开发
  • 石家庄网站建设规划扫二维码直接进入网站怎么做
  • 网站做公司简介怎么做高端品牌网站建设公司
  • 怎样做网站代理网站建设开发免费咨询
  • 企业门户网站平台建设招标采购文件搜索热词排行榜
  • 网站开发流程 知乎国内做网站用的程序
  • 做网站要有什么功能wordpress 手机版 导航
  • 医药招商网站建设网站 内部搜索引擎
  • 河南网站优化公司哪家好wordpress论坛优化
  • 云端网站建设重庆企业官网设计
  • 建立自己的网站需要多少钱国家建设免费论文网站
  • 流行的网站建设技术有哪些网店怎么开的
  • 怎么用vs2010做网站设计安阳吧百度贴吧
  • 博客论坛网站开发建网站几个按钮
  • 深圳seo网站推广报价网页制作的内容
  • 沈阳市网站建设慢慢来做网站多少钱
  • 网站设计模板含数据库防封域名
  • 农家乐网站源代码wordpress下载付费
  • 阳春做网站网站开发电脑内存要多少
  • 网站开发ceac证网站设计抄袭
  • 网络网站公司废品回收在哪个网站做效果好
  • 做网站发违规内容 网警抓不抓国外网站阻止国内访问怎么做
  • 微信微网站怎么做鸿蒙最新版本
  • 网站怎么做地区屏蔽js北京网络网站建设价格