本节书摘来自异步社区出版社《C++多线程编程实战》一书中的第1章,第1.1节,作者: 【黑山共和国】Milos Ljumovic(米洛斯 留莫维奇),更多章节内容可以访问云栖社区“异步社区”公众号查看。
第1章 C++概念和特性简介
C++多线程编程实战
本章介绍以下内容:
创建一个C++项目
程序结构、执行流、运行时对象
结构编程方法
理解面向对象编程方法
解释继承、重载和覆盖
理解多态
事件处理器和消息传递接口
链表、队列、栈示例
1.1 介绍
系统所执行的程序的进程或抽象是所有操作系统的核心概念。现在,绝大多数的操作系统在同一时间内都可以进行多项操作。例如,计算机在用户编辑Word文档时,还可以打印该文档、从硬盘缓冲区读数据、播放音乐等。在多任务操作系统中,中央处理单元(CPU)在程序中快速切换,执行每个程序只需几毫秒。
从严格意义上来说,对于单处理器系统,处理器在一个单元时间内只能执行一个进程。操作系统以极快的速度切换多个进程,营造了一个多进程同时运行的假象。与多处理器系统中硬件支持的真正并行相比,单处理器系统的这种并行叫伪并行(pseudoparallelism)更合适。
多线程(multithreading)是现代操作系统中非常重要的概念。多线程即允许执行多个线程,对完成并行任务和提升用户体验非常重要。
在传统的操作系统中,每个进程都有自己的地址空间和一个执行线程,该线程通常叫主线程(primary thread)。一般而言,运行在同一个进程中的多个线程具有相同的地址空间(即进程的地址空间),在准并行上下文中,这些线程就像是多个单独运行的进程,只不过它们的地址空间相同。
图标
伪并行是操作系统在单处理器环境下的特性。准并行地址空间概念是Windows操作系统的特性。在多处理器系统中,Windows为每个进程提供了一个虚拟地址空间,比真正的物理地址空间大得多,因此叫做准并行上下文。
线程(thread)是操作系统中的一个重要概念。线程对象包含一个程序计数器(负责处理在下一次线程获取处理器时间时要执行什么指令)、一组寄存器(储存线程正在操控的变量当前值)、一个栈(储存与函数调用和参数相关的数据),等等。虽然线程执行在进程的上下文中,但是它们的区别很大。进程非常贪婪,想占用所有的资源;而线程比较“友好”,它们彼此合作、交流,而且共享资源(如处理器时间、内存和变量等)。