当前位置:网站首页>多线程系列之基本概念
多线程系列之基本概念
2022-06-09 10:00:00 【大道一支菜鸟】
今天开始系统的学习一下多线程,参考:
https://blog.csdn.net/luoweifu/article/details/46595285
http://www.cnblogs.com/lisuyun/articles/3293580.html
我们从最基本的操作系统概念来了解。大部分操作系统的任务调度是采用时间片轮转的抢占式调度方式,每一小段时间执行一个任务,轮流来执行任务。故任务有不用的状态,如运行状态和就绪状态等。CPU的效率非常的高,时间片非常短,能够在不同的任务之间快速的穿梭切换,给人的感觉像是多个任务“同时进行”,这也就是并发。但是同一个时间点,只有一个任务在执行。(多核除外)。
操作系统是计算机的管理者,负责资源分配,任务调度等。应用程序是具有某个功能的程序,是运行在操作系统之上的。
1、线程、进程、程序、应用程序四个之间的关系。
我们要搞懂线程和进程、程序、应用程序之间的关系。有一种说法是“一个程序至少有一个进程,一个进程至少有一个线程”,这种说法是错误的。程序(program)只能有一个进程,一个进程就是一个程序。打开chrome,有十多个进程,那就是十多个程序,操作系统给他们分配了彼此独立的内存,相互执行不受彼此约束,分配同样时间的cpu。但是对于用户而言,他们是一个整体,称之为应用程序(application)。对于计算机而言,一个进程就是一个程序,多个进程(比如一个浏览器的多个进程),就是多个不同的程序,它不会把它们理解为一个完整的“程序”。也就是说一个应用程序可能会包含很多的程序,程序和进程是一样的,独立的。其实进程之间的关系只有父子关系,没有主从关系,他们之间是并行独立的。但是线程之间是有主从关系的,而且他们共享的是同一块内存块(包括程序、数据和堆栈)。
打个比方,进程之间是父子关系,父进程fork子进程,就好比你养了个儿子。这个子进程会拷贝一份内存块,把程序和数据都复制过去,你儿子跟你长的也很像。但是一旦出生下来了,你们就是两个独立的个体,法律上都是平等的。子进程之后就完全独立了,父进程与子进程之间的关系,与其他进程的关系都是一样的,平等的,谁也管不着谁了,他们也只能采用进程间通信才能相互了解。父亲死了,儿子还活着;父进程over了,子进程可以照样活的好好的。(除非程序员认定有一个进程over了,其他进程没有存在的意义,比如浏览器负责渲染的进程如果down掉了,其他进程自动kill掉)。
但是进程的不同线程的关系可不是这样的。进程可以由多个线程组成,这称之为多线程程序,他们之间的关系就好比你的大脑与四肢和身体其他部分的关系一样。大脑就是主线程,其他部分就是子线程。子线程由主线程派生,而依附于主线程。主线程一旦over,进程就over了,其他子线程更是over了。他们的内存和数据都是同一份,没有进行隔离(既方便,也危险),不需要额外的通信函数。
父亲死了,儿子依旧活下去,你头断了,人还能活吗?
了解进程与线程的关系,就要了解他们的区别。一个计算机可以有多个进程,这称之为多任务,他们共享的是CPU,硬盘,打印机,显示器,但他们的内存是独立的,所以需要进程间通信,这是计算机发展的第一步。一个进程可以有多个线程,这称之为多线程,他们除了共享进程间的共享内容之外,还共享内存,这是计算机发展的第二步,主要是为了满足并行运算时共享数据,无需额外的通信。
所以正确的结论是:一个程序(program)就是一个正在执行的进程,而每个进程,可以是单线程的,也可以是多线程的。一个应用程序(application)通常由多个程序组成。
还是强调下程序(program)和应用程序(application)的区别。一个程序就是一个进程,永远不要说一个程序可能有多个进程。你打开一个应用程序(比如chrome),会有十多个进程,对于计算机而言,它们都是独立的。好比,父亲和儿子在外人看来是一家人,但是对于法律上来说,就是独立的法人。
边栏推荐
猜你喜欢

77.5% of the world's websites are using PHP, the "best language in the world"!
![[genius_platform software platform development] lesson 35: UDP for cross network segment broadcasting](/img/53/c8d8b388788e13bdbf5cad9fbf91d6.png)
[genius_platform software platform development] lesson 35: UDP for cross network segment broadcasting

叁拾柒- JS 在 Canvas 上尝试分形图形 (一) 画了一个普通箱子图

How many points can you get if the programmer's college entrance examination paper is exposed?

使用source tree 误删远程以及本地仓库恢复办法

Unemployment wave? Yuancosmos opens up new employment opportunities

历史上的今天:PHP公开发布;iPhone 4 问世;万维网之父诞生

叁拾贰- NodeJS简单代理池(有完没完?) 之 SuperAgent 使用代理不是 Timeout 的 Timeout

刷脸认证如何实现人脸又快又准完成校验?

1019. the next larger node in the linked list
随机推荐
損失 3 億美元後,IBM 宣布退出俄羅斯!
Why do we want to be young when we grow up?
Webassembly 2022 survey coming
Query permission information from database
Construction of vocabulary and sampling -- [torch learning notes]
肆拾伍- 正则表达式 (?=pattern) 以及 (?!pattern)
InfoQ 极客传媒 15 周年庆征文| 迁移 Eureka 到 Nacos 之双注册双订阅模式
Solutions to some medium and high risk vulnerabilities detected by appscan
安防监控视频EasyCVR视频调阅界面增加单个视频的关闭按钮
科研入门,在导师完全散养不管的状态下,怎么提升自己的科研能力?
从SQL注入绕过最新安全狗WAF中学习fuzz
WebAssembly 2022调查来啦
叁拾壹- NodeJS简单代理池(合) 之 MongoDB 链接数爆炸了
Go strconv package
15个必知的Mysql索引失效场景,别再踩坑了!
【图像增强】基于稀疏表示和正则化实现图像增强附matlab代码
InfoQ geek media's 15th anniversary solicitation 𞓜 migration of Eureka to Nacos: dual registration and dual subscription model
leetcode.36 --- 有效的数独
With good conditional access, remote office is more secure and efficient
UnsupportedOperationException异常解决