并发编程01—基础

本文介绍了并发编程的基础知识,包括并发、并行的区别,CPU调度、时间片和上下文切换的概念。讨论了同步与异步、阻塞与非阻塞的区别,并详细阐述了实现并发的几种方式,如进程、线程和协程,以及它们的关系和特点。文章还探讨了多线程中的线程安全、死锁和饿死问题,以及多线程的三大特性:原子性、可见性和有序性。
摘要由CSDN通过智能技术生成

一.并发概念

 

1.并发常见的概念

 

串行/并发/并行

串行:多个任务,执行时一个执行完再执行另一个

并发:多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换

并行:是指多个处理器或者是多核的处理器同时处理多个不同的任务

 

 

CPU调度:

进程/线程由运行态切换到其他状态,或者由其他状态切换到运行态,即拥有时间片

 

时间片:

时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的,时间片一般是几十毫秒

 

上下文切换:

CPU通过分配时间片来执行任务,当一个任务的时间片用完,就会切换到另一个任务。在切换之前会保存上一个任务的状态,当下次再切换到该任务,就会加载这个状态。

 

上下文切换开销:

当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行。这种切换称为“上下文切换”(“context switch”)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。

 

减少上下文切换:

  • 无锁并发编程

  • CAS算法

  • 使用最小线程

  • 协程

 

 

同步:

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。

例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事

 

异步:

异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

 

例如 ajax请求(异步): 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

 

同步执行

 

同步执行当调用方法执行完成后并返回结果,才能执行后续代码

 

 

异步执行

调用方法后不会等到sum方法执行完成,而是直接执行后续代码。sum方法执行完成后主要通过状态通知主线程,或者通过回调处理这次异步方法执行的结果

 

 

 

阻塞:

阻塞调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值