深入理解计算机系统 第十二章 并发编程 (1)

现代操作系统提供了三种基本的构造并发程序的方法:

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

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

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

基于I/O多路复用的并发编程

I/O多路复用(I/O multiplexing)技术,基本的思路就是使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。

select是一个复杂的函数,有许多不同的使用场景。我们只讨论第一种场景:等待一组描述符准备好读。

select函数处理类型为fd_set的集合,也叫做描述符集合。逻辑上,我们将描述符集合看成一个大小为n的位向量:bn-1,...,b1,b0。

每个位bk对应于描述符k。当且仅当bk=1,描述符k才表明是描述符集合的一个元素。只允许你对描述符集合做三件事:1)分配它们,2)将一个此种类型的变量赋值给另一个变量,3)用FD_ZERO、FD_SET、FD_CLR和FD_ISSET宏来修改和检查它们。

针对我们的目的,select函数有两个输入:一个称为读集合的描述符集合(fdset)和该读集合的基数(n)(实际上是任何描述符集合的最大基数)。select函数会一直阻塞,直到读集合中至少有一个描述符准备好可以读。当且仅当一个从该描述符读取一个字节的请求不会阻塞时,描述符k就表示准备好可以读了。select有一个副作用,它修改参数fdset指向的fd_set,指明读集合的一个子集,称为准备好集合(ready set),这个集合是由读集合中准备好可以读了的描述符组成的。该函数返回的值指明了准备好集合的基数。注意,由于这个副作用,我们必须在每次调用select时都更新读集合。

基于线程的并发编程

到目前为止,我们已经看到了两种创建并发逻辑流的方法。在第一种方法中,我们为每个流使用了单独的进程。内核会自动调度每个进程,而每个进程有它自己的私有地址空间,这使得流共享数据很困难。在第二种方法中,我们创建自己的逻辑流,并利用I/O多路复用来显式的调度流。因为只有一个进程,所有的流共享整个地址空间。第三种方法---基于线程,它是这两种方法的混合。

线程(thread)就是运行在进程上下文中的逻辑流。在本书里迄今为止,程序都是由每个进程中一个线程组成的。但是现代系统也允许我们编写一个进程里同时运行多个线程的程序。线程由内核自动调度。每个线程都有它自己的线程上下文(thread context),包括一个唯一的整数线程ID(Thread ID,TID)、栈、栈指针、程序计数器、通用目的寄存器和条件码。所有的运行在一个进程里的线程共享该进程的整个虚拟地址空间。

基于线程的逻辑流结合了基于进程和基于I/O多路复用的流的特性。同进程一样,线程由内核自动调度,并且内核通过一个整数ID来识别线程。同基于I/O多路复用的流一样,多个线程运行在单一进程的上下文中,因此共享这个进程虚拟地址空间的所有内容,包括它的代码、数据、堆、共享库和打开的文件。

原文地址:https://www.cnblogs.com/zhishuiyushi/p/12043954.html

时间: 2024-10-11 13:43:09

深入理解计算机系统 第十二章 并发编程 (1)的相关文章

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

如果逻辑控制流在时间上重叠,那么它们就是并发的(concurrent) 这种常见的现象称为并发(concurrency),出现在计算机系统的许多不同层面上. 并发不仅仅局限于内核,它也可以在应用程序中扮演重要角色. 应用级并发在以下情况中都是很有用的: 1.访问慢速 I/O 设备 当一个应用正在等待来自慢速 I/O 设备(例如磁盘)的数据到达时,内核会运行其它进程,使 CPU 保持繁忙.每个应用都可以按照类似的方式,通过交替执行 I/O 请求和其他有用的工作来利用并发. 2.与人交互 和计算机交

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

三种构造并发程序的方法及其优缺点 1.进程 用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护.因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通信机制. 优点: 由于进程有独立的地址空间,所以一个进程不可能不小心覆盖另一个进程的虚拟内存,这就消除了许多令人迷惑的错误 缺点: (1)还是由于进程有独立的地址空间,使得进程共享状态信息变得更加困难.为了共享信息,它们必须使用显式的 IPC(进程间通信)机制. (2)由于进程控制和 IPC 的开销很高,所以这种方

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

第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟悉的例子. 我们主要将并发看做是一种操作系统内核用来运行多个应用程序的机制. 但是,并发不仅仅局限于内核.它也可以在应用程序中扮演重要的角色. 例如 Unix信号处理程序如何允许应用响应异步事件 例如:用户键入ctrl-c 程序访问虚拟存储器的一个未定义的区域 其他情况 访问慢速I/O设备 当一个应

第十二章 并发编程

第十二章 并发编程 三种基本的构造并发程序 进程:每个逻辑控制流是一个进程,由内核进行调度,进程有独立的虚拟地址空间 I/O多路复用:逻辑流被模型化为状态机,所有流共享同一个地址空间 线程:运行在单一进程上下文中的逻辑流,由内核进行调度,共享同一个虚拟地址空间 常用函数: fork exec waitpid 基于I/O多路复用的并发事件驱动服务器 事件驱动程序:将逻辑流模型化为状态机. 状态机: 状态 输入事件 转移 对于状态机的理解,参考EDA课程中学习的状态转换图的画法和状态机. 整体的流程

第十二章 并发编程 学习笔记

第十二章 并发编程 进程是程序级并发,线程是函数级并发. 三种基本的构造并发程序的方法: 进程:每个逻辑控制流是个一个进程,由内核进行调度和维护. I/O多路复用:应用程序在一个进程的上下文中显式地调度他们自己的逻辑流. 线程:运行在单一进程上下文中的逻辑流,由内核进行调度. 12.1 基于进程的并发编程 构造并发程序最简单的方法就是用进程. 使用大家都很熟悉的函数例如: fork exec waitpid 关于在父.子进程间共享状态信息:共享文件表,但不共享用户地址空间. 进程又独立的地址空间

第十五章 并发编程

1.操作系统的发展史 参考:http://www.cnblogs.com/Eva-J/articles/8253521.html 知识点 输入输出 -- 大部分时间都不会占用CPU,但会降低你程序的效率 操作系统的三种基本类型:多道批处理系统.分时系统.实时系统. 现在操作系统 基于多道批处理系统和分时系统 多个程序.作业在遇到IO操作的时候,操作系统会帮助你进行切换 让CPU的利用率得到最大的提高 2.进程 初识进程 进程: 运行中的程序 操作系统 只负责管理调度进程 进程是操作系统中资源分配

第十二章-网络编程

1 TCP/IP IP协议赋值吧数据从一台计算机通过网络发送到另一台计算机. 数据是被分割成一个个小块, 然后通过IP包发送出去的. 其中如何在负载的网络链路中传送的是通过路由器进行转发达到最终的目的地 TCP协议是建立在IP协议之上的, TCP协议负责在两台计算机之间建立可靠连接, 而且保证数据包按照顺序到达, 主要是依靠握手协议和对数据包进行编号, 确保数据被对方收到 应用成的HTTP和SMTP等协议都是基于TCP协议的 IP包的组成: 源IP地址, 目的IP地址, 源端口, 目的端口, 数

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

原文:[.NET Core项目实战-统一认证平台]第十二章 授权篇-深入理解JWT生成及验证流程 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性,最后我们使用.net webapi来实现一个外部接口(本来想用JAVA来实现的,

Java学习笔记—第十二章 Java网络编程入门

第十二章  Java网络编程入门 Java提供的三大类网络功能: (1)URL和URLConnection:三大类中最高级的一种,通过URL网络资源表达方式,可以很容易确定网络上数据的位置.利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端. (2)Socket:又称"套接字",用于描述IP地址和端口(在Internet中,网络中的每台主机都有一个唯一的IP地址,而每台主机又通过提供多个不同端口来提供多种服务).在客户/服务器网络中,当客