三种构造并发程序的方法及其优缺点

1、进程

用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护。因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通信机制。

优点:

由于进程有独立的地址空间,所以一个进程不可能不小心覆盖另一个进程的虚拟内存,这就消除了许多令人迷惑的错误

缺点:

(1)还是由于进程有独立的地址空间,使得进程共享状态信息变得更加困难。为了共享信息,它们必须使用显式的 IPC(进程间通信)机制。

(2)由于进程控制和 IPC 的开销很高,所以这种方式比较慢

2、I/O 多路复用

在这种形式的并发编程中,应用程序在一个进程的上下文中显式地调度它们自己的逻辑流。逻辑流被模型化为状态机,数据到达文件描述符后,主程序显式地从一个状态转换到另一个状态。因为程序是一个单独的进程,所以所有的流都共享同一个地址空间。

优点:

(1)比基于进程的设计给了程序员更多的对程序行为的控制。

(2)一个基于 I/O 多路复用的事件驱动服务器是运行在单一进程上下文中的,因此每个逻辑流都能访问全部地址空间。这使得在流之间共享数据变得很容易。

(3)一个与作为单个进程运行相关的优点是,你可以利用熟悉的调试工具,例如 GDB,来调试你的并发服务器,就像对顺序程序那样。

(4)事件驱动设计常常比基于进程的设计要高效得多,因为它们不需要进程上下文切换来调度新的流

缺点:

(1)编码复杂

(2)不能充分利用多核处理器

3、线程

线程是运行在一个单一进程上下文中的逻辑流,由内核进行调度。你可以把线程看成是其他两种方式的混合体,像进程流一样由内核进行调度,而像 I/O 多路复用一样来共享同一个虚拟地址空间。

优点:

(1)能充分利用多核服务器

(2)速度快

(3)线程间共享数据很便利

缺点:

由于在同一个进程中,故容易产生线程安全问题

进程间通信方式

1、匿名管道通信

2、高级管道通信

3、有名管道通信

4、消息队列通信

5、信号量通信

6、信号

7、共享内存通信

8、套接字通信

参考:

https://blog.csdn.net/violet_echo_0908/article/details/51201278

深入理解计算机系统 第十二章 并发编程 part1 第二遍的更多相关文章

  1. [CSAPP笔记][第十二章并发编程]

    第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...

  2. CSAPP:第十二章 并发编程

    CSAPP:第十二章 并发编程 12.1 线程执行模型12.2 多线程之间并发通信12.3 其他并发问题   使用应用级并发的应用程序称为并发程序.现代操作系统提供三种基本的构造并发程序的方法: 进程 ...

  3. 深入理解计算机系统 第十一章 网络编程 part1 第二遍

    客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型的.采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成.服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服 ...

  4. 十二. Go并发编程--sync/errGroup

    一.序 这一篇算是并发编程的一个补充,起因是当前有个项目,大概の 需求是,根据kafka的分区(partition)数,创建同等数量的 消费者( goroutine)从不同的分区中消费者消费数据,但是 ...

  5. java并发编程实战:第十二章---并发程序的测试

    并发程序中潜在错误的发生并不具有确定性,而是随机的. 安全性测试:通常会采用测试不变性条件的形式,即判断某个类的行为是否与其规范保持一致 活跃性测试:进展测试和无进展测试两方面,这些都是很难量化的(性 ...

  6. 深入理解计算机系统 第十一章 网络编程 part2 第二遍

    客户端和服务器通过因特网这个全球网络来通信.从程序员的观点来看,我们可以把因特网看成是一个全球范围的主机集合,具有以下几个属性: 1.每个因特网主机都有一个唯一的 32 为名字,称为它的 IP 地址 ...

  7. 《深入理解java虚拟机》读书笔记十一——第十二章

    第十二章  Java内存模型与线程 1.硬件效率与一致性 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...

  8. 《OpenCL异构并行编程实战》补充笔记散点,第五至十二章

    ▶ 第五章,OpenCL 的并发与执行模型 ● 内存对象与上下文相关而不是与设备相关.设备在不同设备之间的移动如下,如果 kernel 在第二个设备上运行,那么在第一个设备上产生的任何数据结果在第二个 ...

  9. PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)

    主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...

随机推荐

  1. ARTS打卡计划第十三周

    Algorithms: https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/ 最长连续子序列. Rev ...

  2. springMVC课程笔记(二)springMVC组件配置

    1.springMVC的DispatcherServlet前段控制器配置,如下图所示在web.xml中配置如下内容: 2.在spring配置文件中,配置处理器适配器HandlerAdapter和映射器 ...

  3. JWT加密解密

    如何保证WebAPI的安全?1.JWT加密解密.token2.使用https传输协议.3.把用户所有请求的参数信息加上一个只有服务器端知道的secret,做个散列运算,然后到了服务器端,服务器端也做一 ...

  4. mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci的关系

    mysql中的utf8mb4.utf8mb4_unicode_ci.utf8mb4_general_ci的关系 一.总结 一句话总结: utf8mb4是utf8的超集并完全兼容utf8,能够用四个字节 ...

  5. 1.2 位于Shell脚本第一行的#!

    学习<shell脚本学习指南>一书,记录总结,便于自己回忆,希望对你有帮助! 2.4 自给自足的脚本:位于第一行的 #! 1.Shell脚本执行过程 当Shell执行一个程序时,会要求UN ...

  6. LC 835. Image Overlap

    Two images A and B are given, represented as binary, square matrices of the same size.  (A binary ma ...

  7. Eclipse取消汉化以及设置语言的方法

    Eclipse取消汉化以及设置语言的方法 转 https://jingyan.baidu.com/article/11c17a2c2c1939f446e39d13.html Eclipse下载以后都是 ...

  8. 把文档中的数据取出并插入到excel中

    from xlrd import open_workbookfrom xlutils.copy import copy jsonfile=r'C:\Users\Administrator\Deskto ...

  9. UM概述

    历史 UML创始于1994年10月,主要创始人Grady Booch.Jim Rumbaugh和Ivar Jacobson. UML(Unified modeling language统一建模语言) ...

  10. c++ STL之map

    map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,map中的元素是自动按Key升序排序,所以不能对map用sort函数: ...