美文网首页
Go并发编程-基础-第一期

Go并发编程-基础-第一期

作者: 没我找不到电子书 | 来源:发表于2018-11-29 00:05 被阅读0次

    并发程序与并行程序

     并发程序指可以被同时发起的程序,多个任务在CPU的某个核上交替运行,而并行程序则是被设计成可以在并行的硬件上执行的并发程序。
     假如我们正在编写一个 web 浏览器。这个 web 浏览器有各种组件。其中两个分别是 web 页面的渲染和从网上下载文件的下载器。假设我们已经构建好了浏览器代码,各个组件也都可以相互独立地运行(通过像 Java 里的线程,或者通过即将介绍的 Go 语言中的 [Go 协程]来实现)。当浏览器在单核处理器中运行时,处理器会在浏览器的两个组件间进行上下文切换。它可能在一段时间内下载文件,转而又对用户请求的 web 页面进行渲染。这就是并发。并发的进程从不同的时间点开始,分别交替运行。在这里,就是在不同的时间点开始进行下载和渲染,并相互交替运行的。
     如果该浏览器在一个多核处理器上运行,此时下载文件的组件和渲染 HTML 的组件可能会在不同的核上同时运行。这称之为并行。
     并行不一定会加快运行速度,因为并行运行的组件之间可能需要相互通信。在我们浏览器的例子里,当文件下载完成后,应当对用户进行提醒,比如弹出一个窗口。于是,在负责下载的组件和负责渲染用户界面的组件之间,就产生了通信。在并发系统上,这种通信开销很小。但在多核的并行系统上,组件间的通信开销就很高了。所以,并行不一定会加快运行速度!

    并发程序内部交互

     并发程序内部会被划分为多个部分,每个部分都可以看作一个串行程序。在这些串行程序间可能会存在交互的需求。这就涉及到同步。同步的作用是避免在并发访问共享资源时可能发生的冲突,以及确保有条不絮的传递数据。
     传递数据是并发程序内部的另一种交互方式,也称为并发程序的内部通信。实际上协调这中内部通信的机制除了“同步”这一种也可以使用“异步”。异步方式可以不加延迟的发送给数据接收方。即使接收方还没有为接受数据做好准备,也不会造成数据发送方的等待。数据会被临时存放在一个称为通信缓存的数据结构中。通信缓存是一种特殊的共享资源,它可以被多个程序使用。数据接收方可以在准备就绪后按照数据存入通信缓存的顺序接受它们。

    相关文章

      网友评论

          本文标题:Go并发编程-基础-第一期

          本文链接:https://www.haomeiwen.com/subject/hfwsqqtx.html