java多线程:2、单线程程序与多线程程序

版权声明:本文为博主原创文章,不得随意转载,转载请注明出处!!! https://blog.csdn.net/YuDBL/article/details/85721554

声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!

文章目录

单线程程序

多线程程序


单线程程序

在进程的地址空间当中,只有一个线程,由这一个线程来完成我们程序的执行任务。

如:这就好像有一个患者要动手术,医院由于人手紧张,给这个患者就配备了一个医生,

我们可以把这名医生看作是一个单线程,由他来完成给这个患者动手术,这样的一个工作任务。

当然这是比较危险的。要注意的是在一个进程当中,肯定至少会有一个线程。

多线程程序

在我们进程的地址空间当中,有两个线程(或两个以上的线程),他们可以并发的运行,

来完成我们程序的执行任务。

如:这就好像医院为了完成这次手术,给这个医生配备了几名护士,

由这个医生和这几名护士来共同完成动手术的这样一个工作任务。

那么这个医生和这几名护士我们就可以把他看作是多线程程序。医生负责为这个患者动手术,

其中一名护士负责给医生拿动手术所用的器具,另外一个护士负责给医生擦汗,由他们共同来完成这次

工作任务。那么手术效率就要好些,患者的生存希望也会提高。这就是一个多线程的程序

在我们的程序执行过程当中,是由cpu来执行的,

在我们单cpu的平台下,某一个时刻只能有一个线程在运行。

那为什么我们在启动多个进程 或者说 一个进程当中的多个线程 的时候

我们看到好像是这几个进程 或者说 这几个线程 他们在同时运行呢?

这主要是因为线程是由我们操作系统来调度的

在我们windows平台下,操作系统会给我们每一个线程分配一个时间片

这是一个很短的时间间隔,当线程A运行到它的时间片终止的时候,

那么操作系统就会随机的去选择另外一个线程,比如说是线程B来运行。

那么当线程B它的时间片终止的时候,操作系统又会随机的去选择另外一个线程来运行。

因为这个时间片很短,那么操作系统在我们多个线程之间,频繁的发生切换,

给我们的感觉:就好像是这几个线程,他们在同时运行一样。

那么既然在单cpu的硬件平台下,某一个时刻只有一个线程能够运行,

那么我们为什么还要设计多线程程序呢?我们能不能够用多进程来代替多线程程序呢?

对于一个多线程程序来说,虽然说它在一个单cpu的平台下,某一个时刻只有一个线程在运行,

但如果我们的程序移植到一个多cpu的硬件平台下,那么在同一个时刻下,就可以同时运行多个线程,

从而达到真正意义上的并发运行,我们在编写多线程程序的时候,我们要考虑到这样的一个可移植性,

在我们真正的移植到一个多cpu的平台下,我们程序的执行效率会大幅的提高。

另外我们能不能够用多进程来代替多线程程序呢?

对于一个进程与进程之间的切换来说,因为每一个进程,操作系统都要给他分配自身的独立的地址空间,

当两个进程之间发生切换的时候,那么他们要交换整个内存地址空间,而对于多线程程序来说,因为

一个进程当中的多个线程,它们是共享的同一个存储空间,所以在多线程程序在进行切换的时候,那么

只需要改变程序的执行路线和它们的局部变量就可以啦。当然这种切换的效率远远高于我们进程之间切换

的效率,所以我们在完成需要同时执行多个任务的程序当中,那么我们通常是采用这种多线程程序,而

最好不要采用多进程来完成。

比如说:我们做一个网站的后台服务程序,当有一个客服连接请求到来的时候,

我们应该是去开辟一个线程去为他服务,而不是开辟一个进程来为他服务。这样对于我们服务器端的资源

的合理利用、包括效率的提升,都是有好处的。

猜你喜欢

转载自blog.csdn.net/YuDBL/article/details/85721554