首页 > 编程语言 >并发编程概览

并发编程概览

时间:2023-02-12 17:11:06浏览次数:45  
标签:协程 编程 概览 调度 并发 线程 进程 执行

并行和并发

并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。

并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。

  • 并行是两个队列同时使用两台咖啡机
  • 并发是两个队列交替使用一台咖啡机

并发:不同的执行单位,看起来是一起执行的,但是微观上还是串行的。

并行:多核CPU同时执行。

进程 线程 协程

区别

  • 进程是资源分配的单元,线程是调度的单元。
  • 协程是用户态的,只是将待执行的程序用堆栈维护起来,然后在同一个线程上交替执行,只是并行,不是并发。

消耗

  • 多线程,需要CPU和内核层的上下文切换,切换的是时间片。
  • 多进程,不仅是时间片,还有资源调度,更麻烦。

优势

  • 多进程的好处是数据隔离,A崩了不影响B。
  • 多线程是共享数据的,进程间通信会比较方便。

进程间通信方式:管道,消息队列,信号量,Socket,Streams 等。

(这些都是通过共享内存来通讯,而GO是利用通信来共享内存。)

什么是协程

线程遇到阻塞函数,只能挂起,切到别的线程,为了减少切换成本,java可以用异步回调。

异步回调确实不用阻塞,不过它有两个弊端,

  • 其一:割裂了原来的代码业务逻辑。
  • 其二:陷入回调地狱难以维护。

而Go采用了线程的思路:

线程可以在遇到阻塞的地方后,保存执行的上下文,转而去执行别处的代码。

待阻塞的请求完成后,再转而回去继续执行。

函数执行到一半还能中途退出再回来?

线程执行函数中途,遇到时间片用完或者遇到I/O阻塞,就会被操作系统保存上下文后挂起,切换到其他线程。而后等到机会再回过头继续执行,不是吗?

既然操作系统可以调度管理多个线程,那为何线程不可以调度管理函数的执行?


线程是操作系统抽象出来的执行流,由操作系统统一调度管理。

那在一个线程中,同样可以抽象出多个执行流,由线程来统一调度管理。这线程之上抽象的执行流就是协程。

线程:

协程:

线程的调度由操作系统来管理,是抢占式调度。

而协程不同,协程需要互相配合,主动交出执行权,这也是协程的名字——协作式程序的来历。

标签:协程,编程,概览,调度,并发,线程,进程,执行
From: https://www.cnblogs.com/HappyTeemo/p/17114153.html

相关文章

  • 为何我决心回归编程
    前面我的博客文章阐述了占卜的哲学,以及自己因为占卜的结果,而决心放弃编程。可人生与天地之间。我岂能如此简单认命。至此,其实也就是在刚刚,我发现了占卜哲学的漏洞。你要知道......
  • ansible并发设置与限制
    一、说明与设置1、问题需要同时对上百台机器进行批量命令执行,执行时间过长2、forks设置Ansible提供一个forks的属性,可以设置运行并行进程数。这个值默认比较保守,只有5个并行......
  • 高效 XML 开发的 C# 编程技巧
    最大限度地提高高效可靠的XML解决方案的技能XML(eXtensibleMarkupLanguage)于1996年由万维网联盟(W3C)首次提出,并于1998年成为官方推荐。XML被设计为一种数据交换格式,有助于......
  • 学习ASP.NET Core Blazor编程系列二十五——登录(4)
    学习ASP.NETCoreBlazor编程系列文章之目录学习ASP.NETCoreBlazor编程系列一——综述学习ASP.NETCoreBlazor编程系列二——第一个Blazor应用程序(上)学习A......
  • http详解笔记学习9-socket编程怎么发送get请求-1
        ......
  • Python黑客编程之Bp模糊测试插件
    描述编写一个burpsuite的模糊测试插件,对拦截到的http载荷进行变异测试分析用python写bp插件的话,需要安装一个Jython环境——一个用java编写的python2实现接口部分代......
  • Python 高级编程之生成器与协程进阶(五)
    目录一、概述二、生成器1)生成器和迭代器的区别2)生成器创建方式1、通过生成器函数创建2、通过生成器表达式创建3)生成器表达式4)yield关键字5)生成器函数6)return和yield异同......
  • Python黑客编程之爆破网站登录表单
    描述遍历字典,发送requests请求到目标网站,根据响应判断是否登录成功分析SecLists仓库中存放了大量有用的字典文件,我这里用了一个爆破字典cain.txt在本地部署wordpres......
  • 我的编程之殇
    今晚在我理清哲学的思路以后,我发现,根据卦象,即便是使用Ubuntu,我也没有编程的命。因为我自行占卜了一卦,我没有编写程序的命。于此,我退出编程这个行业了。不好意思。感情我这......
  • 5.4节约内存的编程方法
       以图形用户界面(GUI,GraphicalUserInterface)为基础的Wi你都我是,可以说是一个巨大的操作系统。(1)通过DLL文件实现函数共有     DLL(Dynamic LinkLi......