多进程和多线程的理解,通俗易懂

通俗易懂,适合初学者阅读。强烈推荐。5+星。

申明:此文章是在他处看到的,转自阮一峰博客。

来源:  http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

1.

计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。

2.

假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。

3.

进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。

4.

一个车间里,可以有很多工人。他们协同完成一个任务。

5.

线程就好比车间里的工人。一个进程可以包括多个线程。

6.

车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。

7.

可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。

8.

一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫"互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。

9.

还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。

10.

这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做"信号量"(Semaphore),用来保证多个线程不会互相冲突。

不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

11.

操作系统的设计,因此可以归结为三点:

(1)以多进程形式,允许多个任务同时运行;

(2)以多线程形式,允许单个任务分成不同的部分运行;

(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

(完)

原文地址:https://www.cnblogs.com/zqlym/p/11442555.html

时间: 2024-11-09 03:11:37

多进程和多线程的理解,通俗易懂的相关文章

学习整理——多进程和多线程概念理解

进程 一个进程,包括了代码.数据和分配给进程的资源(内存),在计算机系统里直观地说一个进程就是一个PID.操作系统保护进程空间不受外部进程干扰,即一个进程不能访问到另一个进程的内存.有时候进程间需要进行通信,这时可以使用操作系统提供进程间通信机制.通常情况下,执行一个可执行文件操作系统会为其创建一个进程以供它运行.但如果该执行文件是基于多进程设计的话,操作系统会在最初的进程上创建出多个进程出来,这些进程间执行的代码是一样,但执行结果可能是一样的,也可能是不一样的. 为什么需要多进程?最直观的想法

[转]论多进程与多线程

出于对自己对多进程和多线程概念理解的怀疑,便花时间深入学习了一下.我的目的是将一个生动的围绕CPU运行的动作模型描述出来. 我们先看专业书上是怎么解释的--进程是资源分配的最小单位,线程是CPU调度的最小单位--.只要能把这句话理解了,那也就对多进程与多线程理解的差不多了. 我们来看一下操作系统是怎么协调程序利用单核CPU,内存来运行的:因为是单核的,原则上讲应该是执行一段线程,再切换到令一个线程,是只能这样,但是操作系统是怎么做使得看起来多个程序同时运行的呢?操作系统给每一个程序的运行实体--

(转载)Java多线程入门理解

转载出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢?如果你觉得此文很简单,那推荐你看看Java并发包的的线程池(Java并发编程与技术内幕:线程池深入理解),或者看这个专栏:Java并发编程与技术内幕.你将会对Java里头的高并发场景下的线程有更加深刻的理解. 目录(?)[-] 一扩展javalangThread类 二实现javalan

多进程与多线程差别

 在Unix上编程採用多线程还是多进程的争执由来已久,这样的争执最常见到在C/S通讯中服务端并发技术 的选型上,比方WEBserver技术中.Apache是採用多进程的(perfork模式,每客户连接相应一个进程,每进程中仅仅存在唯一一个运行线程), Java的Web容器Tomcat.Websphere等都是多线程的(每客户连接相应一个线程,全部线程都在一个进程中). 从Unix发展历史看,伴随着Unix的诞生进程就出现了.而线程非常晚才被系统支持,比如Linux直到内核2.6.才支持符合P

多进程与多线程的区别

多进程与多线程的区别 进程是程序在计算机上的一次执行活动.当你运行一个程序,你就启动了一个进程.显然,程序是死的(静态的),进程是活的(动态的).进程可以分为系统进程和用户进程.凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身:所有由你启动的进程都是用户进程.进程是操作系统进行资源分配的单位.在Windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位. 在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便

多进程 vs 多线程

今天和一个朋友聊天,谈到了多进程.多线程的区别,回来搜集文章给出结论: 在Linux2.6上,多线程并不比多进程速度快,考虑到线程栈的问题,多进程在并发上有优势. 转载一篇 在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一个执行线程), Java的Web容器Tomcat.Websphere等都是多线程的(每客户连接对应一个

多进程与多线程区别

 在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一个执行线程), Java的Web容器Tomcat.Websphere等都是多线程的(每客户连接对应一个线程,所有线程都在一个进程中). 从Unix发展历史看,伴随着Unix的诞生进程就出现了,而线程很晚才被系统支持,例如Linux直到内核2.6,才支持符合Posix规范

【转】多进程和多线程的优缺点

在Linux下编程多用多进程编程少用多线程编程. IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多.进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右.当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点

多进程与多线程的选择(转)

1各自特色 关于线程和进程,我们上大学时的教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”.当然了,这句话应付考试已经够了,但是在工作中,光知道这句话是一点用都没有的. 我们在做程序设计的时候,会纠结是用多线程还是用多进程,我可以告诉你,这个问题没有标准答案,合理即正确.根据实际的项目需求,哪个合适选择哪一个. 下面对比一下多进程和多线程的区别 对比项 多进程 多线程 结论 数据共享 数据共享复杂,需要使用IPC,同步简单 数据是共享的,同步复杂 各有优势 内存.