并发编程(一)

简介: 并发编程(一)

一、首先了解下什么是并发编程

1、并发编程历史的介绍

①、早期的计算机是很大的,一个计算机可以占满整个房间,但是这种计算机非常大,但是它从头到尾只执行一个程序,它会造成资源的浪费。无论这台机器的功能有多强大,这么大的计算机没有得到充分的利用。

②、直到后面操作系统的出现,它使计算机能够运行多个程序,那么不同的程序会在不同的进程中运行,这时就会有相应的并发了,就是一个进程会有多个线程,通过多个线程处理并发的问题,带来的好处,可以充分的利用计算机资源,提高相应的资源利用率。程序也会更加平等的获取cpu的一些资源。

2、串行和并行的区别:

举个例子:比如家里来了客人,这时要煮茶招待客人。那么串行的工作方式:

①、首先要洗茶具

②、然后打水

③、烧水,烧水的时间是漫长的,所以一直在等水烧开

④、然后再进行冲茶,去招待这个客人

每个步骤都是按部就班来的。

那么并行是什么样的呢?

①、可以先打水

②、边烧水,边洗茶具,因为烧水的时间是很漫长的,所以放在一起执行

③、等到水烧开之后,茶具也洗好了。

④、进行冲茶的操作

优势:可以缩短整个流程的时间

3、并发编程的目的:

在计算机里面叫摩尔定律,当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍,这一定律揭示了信息技术进步的速度

特点:让程序充分利用计算机资源

         加快储层徐响应速度(耗时任务,web服务器)

         简化异步事件的处理

4、什么时候适合使用并发编程:

①、任务会阻塞线程,导致之后的代码不能执行:比如一边从文件中读取,一边进行大量计算的情况

②、任务执行时间过长,可以划分为分工明确的子任务:比如分段下载

③、任务简短性执行:日志打印

④、任务本身需要协作执行:比如生产者消费者问题

二、并发编程的挑战-频繁的上下文切换

频繁的上下文切换所带来的性能开销,那什么是上下文 的切换:

①、我们知道一个cpu它的运行速度是非常快的,它在运行的时候是为每一个线程分配一定的时间片,那么这个时间片是非常短的,一般都是毫秒级的时间片。cpu会不停的去切换这个线程去执行,在切换的时候,它会保存当前任务的状态,以保证在切换回来的时候,可以在加载这个任务的状态。让我们感觉这个程序是多个任务,多个程序在运行的

②、上下文的切换就会带来一定性能的开销,需要不停的记住状态在我们线程中,也不是开的越多,越好。

三、如何减少上下文切换的开销?

①、在我们编程中尽可能的使用无锁的并发编程,或者通过cas的算法去进行操作。

②、上下文切换由于竞争锁导致性能消耗,所以避免使用锁。比如说将数据的id按照hash进行 取模,然后根据这个数据进行分段。在jdk里面提供一个collectHashMap,里面使用分段锁的机制把锁分到不同的分段上去,它可以根据不同的线程会处理不同分段的数据,这就是无锁并发的编程。

③、使用cas算法来更新这个数据,在java里面使用atomic包使用cas算法来更新这个数据,使用这个包下的类使用cas算法操作数据是不进行加锁的。它底层是利用原子性操作帮我们实现

所以用这种也可以避免上下文切换使用锁带来的开销。

④、使用最少线程:

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

⑤、协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换 --go

相关文章
|
5天前
|
云安全 监控 安全
|
2天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1180 7
|
1天前
|
人工智能
自动化读取内容,不会写爆款的普通人也能产出好内容,附coze工作流
陌晨分享AI内容二创工作流,通过采集爆款文案、清洗文本、智能改写,实现高效批量生产。五步完成从选题到输出,助力内容创作者提升效率,适合多场景应用。
205 104
|
16天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1183 41
|
4天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
339 13
|
16天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
960 78
大厂CIO独家分享:AI如何重塑开发者未来十年
|
11天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
572 32