• 深入理解计算机系统 第十二章 并发编程 part1 第二遍


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

    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

  • 相关阅读:
    openssh升级到openssh-7.5p1踩坑
    office online server部署和简单操作
    aspnetmvc和aspnetcoremvc的一些区别
    office web app server部署和简单操作
    PHP之cURL
    认识PHP的全局变量
    认识Linux系统/etc/hosts
    git学习——stash命令(4)
    Linux netstat命令
    phpstorm+xdebug
  • 原文地址:https://www.cnblogs.com/stone94/p/12079362.html
Copyright © 2020-2023  润新知