Advertisement

多进程与多线程的区别,和用途

阅读量:

一、多进程多线程区别
多进程和多线程的区别,到底啥是多进程,啥是线程

在一个进程中也就是一个应用程序,有多个任务,线程,分别处理不同的任务,比如:这边处理ui,显示菜单图形界面,那边处理算法,计算结果,那边采集外部传感器数据,就叫多线程。

在一个系统上,运行着多个进程,多个应用程序,分别处理不同的任务,就叫多进程。
啥是多个应用程序?就好比你的手机,电脑,运行着听歌软件,又聊着qq,又聊着微信,又看着电影,分别是不同的app,
其实就是不同的应用程序,对于一个Windows,安卓系统来说,宏观上是同时并行 ,微观上还是串行运行 的多个任务。

这很明白了吧,理论上,也可以多个线程处理听歌,qq,微信,电影。但是,但是,为啥要用多进程呢,业务需求不同而已,
假如你是做听歌软件的,开发商只要愿意,也可以边看电影,边听歌,边聊qq,好比某些直播软件,可以看直播,可以同时发字母,不就是聊天的功能吗。

到底,是用多线程,还是多进程?就得研究,多线程和多进程的区别,优缺点。

多线程是在一个应用程序里,意味着多线程可以共享所有全局资源(硬件资源,内存啊,硬盘啊,输入输出啊,数据啊,)。
注意是全局资源,多线程各自有私有栈,数据,不能共享,多线程,共用一个全局资源,所以可以开销小,线程切换容易,通信简单
,可以通过全局区的数据进行通信(全局变量,全局堆,指针,链表,队列啥的),就是竞争的问题,涉及同步与互斥,比如,某个线程想
输出数据打印到显示屏,就一个串口,不能同时用吧,就需要互斥,谁先用,谁先占用,或比如,我要写数据到队列,另一个要读数据,不可能同时写读吧,写的时候,没写完,读的很快读完了,栈指针发生偏移,写数据的线程,不知道,还是之前的栈指针,结果是会导致数据写错误,被覆盖,栈指针出现错误,这就需要互斥来实现。
或者线程要同步的情况,同步指的是啥,比如我听歌时,边缓存歌,边播放歌,当我缓存了,我就去播放歌,不可能我没缓存歌,就播放歌吧,一定是先一,后二,这就是同步的概念。可以看出多线程通信是简单的,创建简单,系统管理,切换简单,在大多数开发会采用多线程实现。

多进程的优缺点,缺点是,一个系统,运行多个程序,每个程序都是占用4g的内存,各自的全局区,不能共享数据,通信比较麻烦,切换时,系统开销大,占用资源,需要保留很多数据,通信的方式,比较常用是网络,共享内存,
好处是方便管理各自的事,各干各的,互不干涉,一个线程死了,整个进程就崩溃了,但是,其他进程不会死,这如果在一个大系统,只有一个线程死了,影响整个系统,那就完蛋了,好比开飞机,两个发送机,坏了一个,其他还能功能,不会掉下来摔死,如果一个发动机,就等死了,或者手机电脑,听歌软件,卡死了不动,并不影响我看电影啊,你干你的,关我毛事,但是有些系统,会考虑安全的问题,就回分开,采用多进程,以防立马死,我能想到的,还有汽车,现在汽车电子发达,有听歌,看电影,自动驾驶,妈的,突然音乐卡死了,自动驾驶,那得完蛋,但是,汽车的系统,肯定不是多线程,而是多进程,多个系统,多个设备,有专门管理网络的,有专门管理自动算法处理的,有专门管理踩油门的,有专门管理娱乐的。

所以,到底,多线程,多进程,看需要,简单的产品,多线程容易开发,复杂的系统,多进程,容易开发。比如开发听歌软件,需要搞个多进程来,一边缓存音乐,一遍播放歌词,一遍显示ui画面吗???完全不需要,通信数据交互,复杂死了,还可能卡呢,用一个多线程就可以简单做到,交互数据,开发贼简单。

最终,总结,多线程,就是一个进程,被进程包含,一个进程可以有多个线程,可以只有一个,比如就一个main函数到底,等我按完按键切换歌曲,你还在干活听歌,还没听到我说话,垃圾,卡死了,摔了。
一个系统可以运行多个进程。

全部评论 (0)

还没有任何评论哟~