声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!
文章目录
一、单线程程序
二、多线程程序
三、在我们的程序执行过程当中,是由cpu来执行的
1、那为什么我们在启动多个进程 或者说 一个进程当中的多个线程 的时候
我们看到好像是这几个进程 或者说 这几个线程 他们在同时运行呢?
2、那么我们为什么还要设计多线程程序呢?
3、另外我们能不能够用多进程来代替多线程程序呢?
在进程的地址空间当中,只有一个线程,由这一个线程来完成我们程序的执行任务。
例如:这就好像有一个患者要动手术,医院由于人手紧张,给这个患者就配备了一个医生,
我们可以把这名医生看作是一个单线程,由他来完成给这个患者动手术,这样的一个工作任务。
当然这是比较危险的。要注意的是在一个进程当中,肯定至少会有一个线程。
在我们进程的地址空间当中,有两个线程(或两个以上的线程),他们可以并发的运行,
来完成我们程序的执行任务。
例如:这就好像医院为了完成这次手术,给这个医生配备了几名护士,
由这个医生和这几名护士来共同完成动手术的这样一个工作任务。
那么这个医生和这几名护士我们就可以把他看作是多线程程序。医生负责为这个患者动手术,
其中一名护士负责给医生拿动手术所用的器具,另外一个护士负责给医生擦汗,由他们共同来完成这次
工作任务。那么手术效率就要好些,患者的生存希望也会提高。这就是一个多线程的程序
在我们单cpu的平台下,某一个时刻只能有一个线程在运行。
这主要是因为线程是由我们操作系统来调度的
在我们windows平台下,操作系统会给我们每一个线程分配一个时间片
这是一个很短的时间间隔,当线程A运行到它的时间片终止的时候,
那么操作系统就会随机的去选择另外一个线程,比如说是线程B来运行。
那么当线程B它的时间片终止的时候,操作系统又会随机的去选择另外一个线程来运行。
因为这个时间片很短,那么操作系统在我们多个线程之间,频繁的发生切换,
给我们的感觉:就好像是这几个线程,他们在同时运行一样。
那么既然在单cpu的硬件平台下,某一个时刻只有一个线程能够运行,
那么我们为什么还要设计多线程程序呢?我们能不能够用多进程来代替多线程程序呢?
对于一个多线程程序来说,虽然说它在一个单cpu的平台下,某一个时刻只有一个线程在运行,
但如果我们的程序移植到一个多cpu的硬件平台下,那么在同一个时刻下,就可以同时运行多个线程,
从而达到真正意义上的并发运行,我们在编写多线程程序的时候,我们要考虑到这样的一个可移植性,
在我们真正的移植到一个多cpu的平台下,我们程序的执行效率会大幅的提高。
对于一个进程与进程之间的切换来说,因为每一个进程,操作系统都要给他分配自身的独立的地址空间,
当两个进程之间发生切换的时候,那么他们要交换整个内存地址空间,
而对于多线程程序来说,因为一个进程当中的多个线程,它们是共享的同一个存储空间,
所以在多线程程序在进行切换的时候,那么只需要改变程序的执行路线和它们的局部变量就可以啦。
当然这种切换的效率远远高于我们进程之间切换的效率,
所以我们在完成需要同时执行多个任务的程序当中,那么我们通常是采用这种多线程程序,
而最好不要采用多进程来完成。
比如说:我们做一个网站的后台服务程序,当有一个客服连接请求到来的时候,
我们应该是去开辟一个线程去为他服务,而不是开辟一个进程来为他服务。
这样对于我们服务器端的资源的合理利用、包括效率的提升,都是有好处的。