[转]线程和进程的概念

简介: 打开电脑,我们可以一边听音乐,一边下载文件,一边浏览网页,三项工作可以同时进行。操作系统用三个应用程序完成这三项工作,每个应用程序都可以被看作一条连续的指令流,CPU一条一条地执行这些指令。然而在单核CPU的计算机中,一个时刻只能执行一条指令,如何实现三项工作同时进行呢?原来操作系统以“时间片轮转”的方式实现这一目标。

打开电脑,我们可以一边听音乐,一边下载文件,一边浏览网页,三项工作可以同时进行。操作系统用三个应用程序完成这三项工作,每个应用程序都可以被看作一条连续的指令流,CPU一条一条地执行这些指令。然而在单核CPU的计算机中,一个时刻只能执行一条指令,如何实现三项工作同时进行呢?原来操作系统以“时间片轮转”的方式实现这一目标。操作系统以进程(Process)的方式运行应用程序,进程不但包括应用程序的指令流,也包括运行程序所需的内存、寄存器等资源。在本章中,你只需把进程理解为一条执行路线就行了。一般情况下,开启三个应用程序,系统里就创建了三个进程,就增加了三条执行路线。操作系统轮流执行每个进程,每个进程执行一小段时间。比如先执行几十毫秒播放音乐的进程,接着执行几十毫秒下载文件的进程,然后再执行几十毫秒浏览网页的进程,三个进程就这样循环往复,交替进行。因为交替时间很短(一般只有几十毫秒),人们根本感觉不到如此短暂的停顿,所以在表面上看来就像三个工作同时进行似的。因此进程在宏观上是并发进行的,在微观上是交替进行的。

现在我们考虑这样一个例子,一个网页里有一段Flash动画,还有一个等待用户输入的文本框。程序必须在播放动画的同时不停的检测有无用户输入,以便及时响应用户的操作。在最早期的操作系统中,我们需要编写一段非常复杂的代码来实现这一目标,现在由于有了多线程技术(Multi-threading),这类问题就变得很简单了,我们可以通过在一个进程中创建两个线程(Threading)来实现我们的目标。线程非常类似于进程,它相当于在一个进程中创建了若干条并行的路线,比如一个线程播放动画,一个线程检测用户输入,操作系统将自动以“时间片轮转”的方式交替执行这两个线程中的指令,这样我们的目标就实现了。

同一个进程中的所有线程共享进程的资源,所以它们之间的切换就比进程间的切换快的多,因此线程可以看作轻量级进程(Lightweight Process)。现代的操作系统都是多进程(Multi-process)的操作系统,每个进程中运行一个或多个线程,所以大多数时间操作系统中都有多个线程并发运行。操作系统中有专门的调度程序管理线程,它根据事先设计好的算法轮流执行每个线程。线程是操作系统进行CPU调度的基本单位,线程的调度是由操作系统自动完成的,无须程序员关心。程序员只需编写好线程即可,线程的轮转交由操作系统完成,因此实现起来非常简单。

近年来Intel和AMD等芯片厂商纷纷发布了多核心CPU,使得线程能够真正的实现同步执行,多线程技术从此翻开新的篇章。

相关文章
|
16天前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
15天前
|
消息中间件 Unix Linux
【C语言】进程和线程详解
在现代操作系统中,进程和线程是实现并发执行的两种主要方式。理解它们的区别和各自的应用场景对于编写高效的并发程序至关重要。
45 6
|
16天前
|
调度 开发者
深入理解:进程与线程的本质差异
在操作系统和计算机编程领域,进程和线程是两个核心概念。它们在程序执行和资源管理中扮演着至关重要的角色。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
40 5
|
14天前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
16天前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
34 4
|
26天前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
21 0
|
6月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
136 13
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
5月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
190 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
4月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。