一文让你读懂高并发编程的意义及其好处和注意事项

yangyang7899 yangyang7899     2023-04-04     617

关键词:

由于多核多线程的CPU的诞生,多线程、高并发的编程越来越受重视和关注。多线程可以给程序带来如下好处。
(1)充分利用CPU的资源
从上面的CPU的介绍,可以看的出来,现在市面上没有CPU的内核不使用多线程并发制
的,特别是服务器还不止一个CPU,如果还是使用单线程的技术做思路,明显就out了。因为程序的基本调度单元是线程,并且一个线程也只能在一个CPU的一个核的一个线程跑,如果你是一个i3的CPU的话,最差也是双核心4线程的运算能力;如果是一个线程的程序的话,那是要浪费3/4的CPU性能;如果设计一个多线程的程序的话,那它就可以同时在多个CPU的多个核的多个线程上跑,可以充分地利用CPU,减少CPU的空闲时间,发挥它的运算能力,提高并发量。

就像我们平时坐地铁一样,很多人坐长线地铁的时候都在认真看书,而不是为了坐地铁而坐
地铁,到家了再去看书,这样你的时间就相当于有了两倍。这就是为什么有些人时间很充裕,而有些人老是说没时间的一个原因,工作也是这样,有的时候可以并发地去做几件事情,充分利用我们的时间,CPU也是一样,也要充分利用。
(2)加快响应用户的时间
比如我们经常用的迅雷下载,都喜欢多开几个线程去下载,谁都不愿意用一个线程去下载,
为什么呢?答案很简单,就是多个线程下载快啊。
我们在做程序开发的时候更应该如此,特别是我们做互联网项目,网页的响应时间若提升ls,
如果流量大的话,就能增加不少转换量。做过高性能web前端调优的都知道,要将静态资源地址用两三个子域名去加载,为什么?因为每多一个子域名,浏览器在加载你的页面的时候就会多开几个线程去加载你的页面资源,提升网站的响应速度。多线程,高并发真的是无处不在。

(3)可以使你的代码模块化,异步化,简单化
例如我们在做Android程序开发的时候,主线程的UI展示部分是一块主代码程序部分,但是UI上的按钮用相应事件的处理程序就可以做个单独的模块程序拿出来。这样既增加了异步的操作,又使程序模块化,清晰化和简单化。时下最流行的异步程序处理机制,正是多线程、并发程序最好的应用例子。
相信多线程应用开发的好处还有很多,大家在日后的代码编写过程中可以慢慢体会它的魅力
所在。
接下来谈谈高并发、多线程要注意的问题:
(1)线程之间的安全性
从前面的章节中我们都知道,在同一个进程里面的多线程是资源共享的,也就是都可以访问
同一个内存地址当中的一个变量。例如:若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的:若有多个线程同时执行写操作,一般都需要考
虑线程同步,否则就可能影响线程安全。
这个我们会在后面章节中详细的说明。
(2)线程之间的死循环过程
为了解决线程之间的安全性引入了Java的锁机制,而一不小心就会产生Java线程死锁的多线程问题,因为不同的线程都在等待那些根本不可能被释放的锁,从而导致所有的工作都无法完成。假设有两个线程,分别代表两个饥饿的人,他们必须共享刀叉并轮流吃饭。他们都需要获得两个锁:共享刀和共享叉的锁。
假如线程A获得了刀,而线程B获得了叉。线程A就会进入阻塞状态来等待获得叉,而线
程B则阻塞来等待线程A所拥有的刀。这只是人为设计的例子,但尽管在运行时很难探测到,这类情况却时常发生。

(3)线程太多了会将服务器资源耗尽形成死机当机
线程数太多有可能造成系统创建大量线程而导致消耗完系统内存以及CPU的“过渡切换”
造成系统的死机,那么我们该如何解决这类问题呢?
某些系统资源是有限的,如文件描述符。多线程程序可能耗尽资源,因为每个线程都可能希
望有一个这样的资源。如果线程数相当大,或者某个资源的侯选线程数远远超过了可用的资源数,则最好使用。一个最好的示例是数据库连接池。只要线程需要使用一个数据库连接,它就从池中取出一个,使用以后再将它返回池中。资源池也称为。这里先有一个概念,后面会逐渐讲到线程池的概念。
多线程应用开发的注意事项很多,希望大家在日后的工作中可以慢慢体会它的危险所在。

 

从源码入手,一文带你读懂springaop面向切面编程

之前《零基础带你看Spring源码——IOC控制反转》详细讲了Spring容器的初始化和加载的原理,后面《你真的完全了解Java动态代理吗?看这篇就够了》介绍了下JDK的动态代理。基于这两者的实现上,这次来探索下Spring的AOP原理。虽... 查看详情

什么是mapreduce,一文带你读懂

什么是MapReduce?MapReduce是一种编程模型,用于大规模数据集的并行运算;是面向大数据并行处理的计算模型、框架和平台。MapReduce思想是什么?MapReduce的思想核心是“分而治之”。 所谓“分而治之”就是把一个复杂的... 查看详情

一文让你读懂分布式锁的使用原理及实现方式(代码片段)

一、为什么要使用分布式锁分布式环境下修改某个共有的数据,比如redis的共有数据;在同一时间,可能多个节点都先查询这个数据,然后更新。在查询的时候,结果是一样的,但是各个节点更新的时候,就是以最后一个更新为... 查看详情

一文带你读懂sdk测试

一.什么是SDKSDK,全称:softwaredevelopmentkit,软件开发工具包。软件开发工具包一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。软件开发工具广义上指辅助开... 查看详情

一文带你读懂python中的进程

进程进程(Process)是计算机中的程序关于某数据集合上的一次运行,即正在运行的程序,是系统进行资源分配和调度的基本单位,进程是对正在参考技术A进程进程(Process)是计算机中的程序关于某数据集合上的一次运行,即正... 查看详情

长这么大才读懂高并发核心编程,限流原理与实战,nginx漏桶限流(代码片段)

Nginx漏桶限流详解使用Nginx可通过配置的方式完成接入层的限流,其ngx_http_limit_req_module模块所提供的limit_req_zone和limit_req两个指令使用漏桶算法进行限流。其中,limit_req_zone指令用于定义一个限流的具体规则(或者计数... 查看详情

一文读懂高性能网络编程中的i/o模型

...式已经无能为力。本文(和下篇《高性能网络编程(六):一文读懂高性能网络编程中的线程模型》)旨在为大家提供有用的高性能网络编程的I/O模型概览以及网络服务进程模型的比较,以揭开设计和实现高性能网络架构的神秘面... 查看详情

3分钟让你读懂什么是adesk桌面云

首先,我们要知道aDesk桌面云就是将本地电脑的桌面操作系统集中于后端服务器上运行,在网络可达的情况下,通过虚拟交付协议将远端“操作系统”快速推送给“客户机”,而用户可使用任何类型的客户机(包括PC、瘦客户机... 查看详情

工业品mro采购网站有哪些优势?一文带你读懂

随着互联网电商的迅速发展,越来越多的工业品企业开始寻求新的突破口,很多MRO商城网站应运而生,这种“互联网+工业”的新型数字化采购模式,能够将数字能力及技术优势贯穿企业管理全流程,让品类... 查看详情

一文带你读懂dockerfile(代码片段)

目录一、概述二、DockerFile构建过程解析(一)Dockerfile内容基础知识(二)Docker执行Dockerfile的大致流程(三)总结三、DockerFile常用保留字指令四、案例(一)自定义镜像mycentosjava8(二)虚... 查看详情

各行各业都在关注的“密评”到底是啥?一文带你读懂!

...:今天我们就来讲讲关于“密评”的那些事儿,一文带你搞懂“密评”!本文分享自华为云社区《各行各业都在关注的“密评”到底是啥?一文带你读懂!》,作者:开天aPaaS小助手。要说2022年各行各... 查看详情

你真的搞懂高并发了吗?万字长文让你彻底理解透彻高并发!

高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPUload升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上... 查看详情

一文读懂:梯度消失(爆炸)及其解决方法

梯度消失问题和梯度爆炸问题,总的来说可以称为梯度不稳定问题。【要背住的知识】:用ReLU代替Sigmoid,用BN层,用残差结构解决梯度消失问题。梯度爆炸问题的话,可以用正则化来限制。sigmoid的导数是【0,0.25】.出现原因两... 查看详情

一篇让你读懂java中的字符串(string)(代码片段)

目录创建字符串方式1方式2方式3三种方式的内存图方式1方式2方式3总结理解池的概念回忆引用字符串判断相等判断字符串引用是否相等代码1代码2代码3代码4总结判断字符串内容是否相等变量与变量进行比较字符串常量与变量进... 查看详情

一文读懂android内存优化,让你的机器持续丝滑

内存优化可以说是性能优化中最重要的优化点之一。不合理的内存占用会影响页面的流畅度、造成界面卡顿,减少应用存活时间,甚至导致用户应用程序发生OOM(outofmemory)崩溃。因此,我们需要找准性能优化... 查看详情

并发编程(代码片段)

...间内可以处理事情的能力 高并发编程的意义、好处和注意事项好处:充分利用cpu的资源、加快用户响应的时间,程序模块化,异步化问题:线程共享资源,存在冲突;容易导致死锁;启用太多的线程,就有搞垮机器的可能认... 查看详情

激光雷达是什么?一文带你读懂激光雷达

 随着人工智能的发展,激光雷达也获得了广泛的关注,在机器人领域,激光雷达可以帮助机器人在未知环境中了解周边地图信息,为后续定位导航提供很好的环境认知能力,帮助机器人实现智能行走。 什么是激光雷达?... 查看详情

一文读懂guavaeventbus(订阅发布事件)

...程进行解析。3、使用指导:EventBus简单的使用指导。4、注意事项:在使用EventBus中需要注意的一些隐藏逻辑。5、分享时提问的问题6、项目中遇到的问题:上述问题进行详细描述并复现场景。1、简述1.1、概念下文摘自EventBus源码... 查看详情