cpu、进程、线程、多线程的一个简单解释(转载)

一 dljd(linux)

1、线程:一种程序可有同时有多条执行线路在执行,线程是一个程序其中正在执行的一条执行线路;

说明:

        线程就是一个程序的执行线路。我们写一段程序,你要让它执行,它总得有一个执行的线路。什么线路?就是你写的那段程序,由一行一行的代码组成,它从哪行代码开始执行,然后依次执行接下来的各行代码,最后到哪行代码结束程序,这就是线路,也叫线程。

        当然,我们说一个程序可以“同时”开很多条不同执行的线路,哪怕开始的是同一行或同几行代码,中间也都可以“同时”分开成多条不同的执行线路,这就是多线程,多线程广义上强调的是“同时”。

2、进程:一个程序的执行,一个进程占用一个端口。

说明:

        就是你写一段程序,这个程序肯定包含多行代码。我们整段程序启动运行时,肯定有很多执行线路(线程)同时运行着。这些同时的多条线路(多线程)的运行,合在一起就是一个进程的执行。比如说含有main()方法的一段程序,从main()方法开始运行就表示一个进程正在开始运行了。当然在main()方法的运行过程中,可以同时创建并执行很多条线路(线程)。但整体来看,这么多线路(线程)的运行,合在一起就是一个进程的运行。

        那我们说进程最重要的一个标志是什么?标志是:一个进程的运行,那么这个进程会占用一个端口,即一个进程一般会占用一个端口。那一个线程的运行会不会占用一个端口?不会,因为线程是进程里边同时执行的一条线路。

        那我们电脑上一般都会运行哪些进程呢?电脑上运行一个软件,其实就是运行一段程序。那程序的运行,就要有一个入口程序(如java程序的运行入口就是main()方法)。那么一个软件的入口程序被启动运行,那么就表明一个进程的运行,也就表明一个端口会被占用。我们电脑上,都会启动运行很多的软件,那么这些软件对应的程序都是进程,都会占用一个端口。比如mysql的入口程序一旦启动运行,那么电脑中就会启动一个mysql的进程,这个进程占用的端口是3306;比如tomcat的入口程序一旦启动运行,那么电脑中就会启动一个tomcat的进程,这个进程占用的端口是8080;

3、守护进程

        服务的别名 —— 守护进程(就是守护linux正常运行的,为linux系统提供一些必要的支撑)。

        服务是什么?服务本质上就是进程。进程是什么?就是一个程序的运行。也就是说,服务其实也是程序。那为什么不把服务和进程管理归为一块呢?因为服务和普通的进程还是有区别的。服务是支持Linux运行的一些必要程序,本质上也是进程,叫守护进程。守护进程通常默默地运行在后台,为应用程序提供必要支撑,比如sshd、防火墙等。

        服务主要是linux后台使用的进程(程序),即守护进程,比如sshd、防火墙等。防火墙这个进程是linux后台使用的进程,做为linux后台的一个服务用的,为了支撑linux正常运行而启用的进程,程序员基本上不使用。守护进程一般不是前台用户使用的,是linux自己要使用的一些进程。sshd服务,是linux专门用来接收和处理外界发过来的远程连接请求用的;如果外界发送远程连接请求,并且linux的sshd服务接收到远程连接请求并建立连接以后,这时外界通过建立好的连接把linux命令发送到linux中,这时linux就会执行外界发送过来的这个命令,同时linux可以把命令的执行结果返回给外界请求者。

3、在window中对进程的管理

        在任务管理器里面正在运行的进程(一个运行的程序,一段运行的代码)列表,如下图:

一个进程对应一个程序,一个程序对应一段代码。为什么说一个进程就是一个程序呢?从图中可以看出,一个进程大都对应一个Xxx.exe文件。Xxx.exe文件, 称为可执行程序。Xxx.exe文件怎么来的?都是开发好的程序,然后打包成Xxx.exe文件。我们一双击执行Xxx.exe文件,表明一个进程的运行,表明需要占用一个端口。

        在windows的任务管理器中,我们可以对进程进行查看、结束等操作。

3、linux中对进程的管理

        linux中也会有很多进程运行着,这些进程也都会占用端口,ps指令:

如上图所示,Linux中的bash进程是什么?bash进程其实就是命令行终端。命令行终端为什么一打开就是黑色的,命令行终端上为什么能敲命令;敲完命令后,为什么还可以执行;执行完命令后,还可以打印出东西来;等等这些问题,都bash进程给我们完成的,其实就是bash程序,底层对应一段代码。

        还有ps这个进程,我们在终端输入ps命令并执行,后台也是对应一个进程》对应一个程序》对应一段代码。回顾一下我前面讲过“一个命令,后台都对应一个可执行文件.sh》对应一个程序》对应一个进程”。

二 转载

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。

最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。

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)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

(完)

参考文献:阮一峰的网络日志 进程与线程的一个简单解释 进程与线程的一个简单解释 - 阮一峰的网络日志

什么是线程?

  把一个进程比喻为一个车间,那么线程就是车间里面的一条条流水线。一个车间可以有多条流水线,流水线属于车间。一个车间的工作过程是一个进程,一个流水线的工作过程是一个线程。进程是操作系统资源分配的最小单位(生产科3号车间负责生产3万件包装纸箱),线程是cup调度的最小单位(3号车间里面的每一条生产线负责生产纸箱这个具体的任务)。

多线程的概念?

  就是一个进程中存在多条线程。多线程是数据共享的(共享进程中的空间地址啥的),就是3号车间有多条流水线,都共用了一个车间的资源。

多线程的应用举例:

  办公三件套之word为例,打开word软件就开启了一个进程,这个进程至少要干几件事儿,1监控键盘输入;2处理文字;3定时自动保存文字信息等,这几件事儿操作的都是同一块数据,所以不能使用多进程(进程间数据隔离啊),只能在一个进程里并发的开启三个县城,如果是单线程,那就只能是键盘输入时,不能处理文字和自动保存,自动保存时又不能打字。

参考文献:开发者知识库 线程理论之大白话 线程理论之大白话 - 开发者知识库

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值