并发程序的优点:

  • 并发能更客观地表现问题模型;
  • 并发可以充分利用CPU核心的优势,提高程序的执行效率;
  • 并发能充分利用CPU与其他硬件设备固有的异步性。

并发包含以下几种主流的实现模型:

  • 多进程。多进程是在操作系统层面进行并发的基本模式。同时也是开销最大的模式。在Linux平台上,很多工具链正是采用这种模式在工作。比如某个Web服务器,它会有专门的进程负责网络端口的监听和链接管理,还会有专门的进程负责事务和运算。这种方法的好处在于简单、进程间互不影响,坏处在于系统开销大,因为所有的进程都是由内核管理的。
  • 多线程。多线程在大部分操作系统上都属于系统层面的并发模式,也是我们使用最多的最有效的一种模式。目前,我们所见的几乎所有工具链都会使用这种模式。它比多进程的开销小很多,但是其开销依旧比较大,且在高并发模式下,效率会有影响。
  • 基于回调的非阻塞/异步IO。这种架构的诞生实际上来源于多线程模式的危机。在很多高并发服务器开发实践中,使用多线程模式会很快耗尽服务器的内存和CPU资源。而这种模式通过事件驱动的方式使用异步IO,使服务器持续运转,且尽可能地少用线程,降低开销,它目前在Node.js中得到了很好的实践。但是使用这种模式,编程比多线程要复杂,因为它把流程做了分割,对于问题本身的反应不够自然。
  • 协程。协程(Coroutine)本质上是一种用户态线程,不需要操作系统来进行抢占式调度,且在真正的实现中寄存于线程中,因此,系统开销极小,可以有效提高线程的任务并发性,而避免多线程的缺点。使用协程的优点是编程简单,结构清晰;缺点是需要语言的支持,如果不支持,则需要用户在程序中自行实现调度器。目前,原生支持协程的语言还很少。

对线程间共享状态的各种操作都被封装在线程之间传递的消息中,这通常要求:发送消息时对状态进行复制,并且在消息传递的边界上交出这个状态的所有权。从逻辑上来看,这个操作与共享内存系统中执行的原子更新操作相同,但从物理上来看则非常不同。由于需要执行复制操作,所以大多数消息传递的实现在性能上并不优越,但线程中的状态管理工作通常会变得更为简单。

参考:

https://www.yuque.com/docs/share/b6ad95b1-d48c-42a4-a7c4-7d04ba1eba97

Go 并发编程之并发基础相关推荐

  1. java内存栅栏_内存屏障(Memory Barriers/Fences) - 并发编程中最基础的一项技术

    我们经常都听到并发编程,但很多人都被其高大上的感觉迷惑而停留在知道听说这一层面,下面我们就来讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见 ...

  2. 内存屏障(Memory Barriers/Fences) - 并发编程中最基础的一项技术

    内存屏障(Memory Barriers/Fences) - 并发编程中最基础的一项技术_chuhan0449的博客-CSDN博客 我们经常都听到并发编程,但很多人都被其高大上的感觉迷惑而停留在知道听 ...

  3. 安琪拉教百里守约学并发编程之多线程基础

    <安琪拉与面试官二三事>系列文章 一个HashMap能跟面试官扯上半个小时 一个synchronized跟面试官扯了半个小时 <安琪拉教鲁班学算法>系列文章 安琪拉教鲁班学算法 ...

  4. 【檀越剑指大厂--并发编程】并发编程总结

    并发编程 一.并发基础 1.什么是并行和并发? 并行,表示两个线程同时(同一时间)做事情. 并发,表示一会做这个事情,一会做另一个事情,存在着调度. 单核 CPU 不可能存在并行(微观上). 2.什么 ...

  5. Java并发编程:并发容器之CopyOnWriteArrayList(转载)

    Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW ...

  6. 【Java并发编程】并发编程大合集

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17539599 为了方便各位网友学习以及方便自己复习之用,将Java并发编程系列内容系列内容 ...

  7. 【转】Java并发编程:并发容器之ConcurrentHashMap

    JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了 ...

  8. 并发编程——JUC并发编程知识脑图

    摘要 并发编程在软件编程中尤为突出和重要,在当今面试或工作中也是不可缺少的.作为一名高级java开发工程师,并发编程的技能已经成为了重要的一项.本博文将详细介绍并发编程中的知识点和知识脑图,帮助大家更 ...

  9. 并发编程-02并发基础CPU多级缓存和Java内存模型JMM

    文章目录 CPU多级缓存 CPU多级缓存概述 CPU 多级缓存-缓存一致性协议MESI CPU 多级缓存-乱序执行优化-重排序 JAVA内存模型 (JMM) 计算机硬件架构简易图示 JAVA内存模型与 ...

  10. 并发编程(一)多线程基础和原理

    多线程基础 最近,准备回顾下多线程相关的知识体系,顺便在这里做个记录. 并发的发展历史 最早的计算机只能解决简单的数学运算问题,比如正弦. 余弦等.运行方式:程序员首先把程序写到纸上,然后穿 孔成卡片 ...

最新文章

  1. 如何将自己写的verilog模块封装成IP核(一)
  2. Spring对Hibernate事务管理
  3. Python程序设计题解【蓝桥杯官网题库】 DAY9-基础练习
  4. WebStorm V2017.1版用于Angular2开发的环境设置
  5. java 大臣的旅费_PREV-9-蓝桥杯-历届试题-大臣的旅费-java
  6. 如何修改作者名称_PS2019中如何扩展文本选区 ps扩展文本选区的图文教程_photoshop教程...
  7. IPC介绍——10个ipcs例子
  8. Coding: 编写合格的REST API
  9. LeetCode 1886. 判断矩阵经轮转后是否一致
  10. 华为机试——句子逆序
  11. SAP MM ‘Pricing Date Control‘字段的理解
  12. 管理节点连接不上sql节点_华为云IEF智能边缘平台十万边缘节点管理技术深度解读学习笔记...
  13. 互联网基础运维分工、职责和技能要求
  14. Linux网络-MAC协议
  15. etc fstab 详解linux,Linux下/etc/fstab文件详解
  16. 用html制作的蚂蜂窝旅游网页设计,蚂蜂窝扩大移动布局 旅游攻略全面HTML5
  17. html怎么让文字半透明,用js设置div背景半透明而文字不透明
  18. JavaScript中的时间与日期、正则表达式和Function类型
  19. c语言编写qq机器人软件,未编译的QQ机器人C语言版
  20. 大学物理(Ⅱ)公式整理

热门文章

  1. 10 Android 植物人大战僵尸-矩形的碰撞监测
  2. 傅里叶变换--快速傅里叶变换实现
  3. byte[]转String后再用String转回byte[]与起始byte[]不一致问题
  4. PAT 1071.小赌怡情
  5. 基于LSTM的剩余寿命预测(PyTorch实现)
  6. Spring Cloud(十二):Spring Cloud Security
  7. 误删文件或者文件丢失怎么样来应对
  8. 电脑截图如何快速识别文字?3分钟教会你快速截图识别怎么做
  9. 制作Ubuntu的deb格式包 从Hello World做起
  10. Intel Realsense D435/D415 基于 Ubuntu 16.04 安装教程