打印

多任务和多线程的区别

[复制链接]
2238|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hclwj181|  楼主 | 2015-4-15 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学习操作系统一直碰到多任务以及多线程这两个概念,虽然明白一个任务(即进程)有一个或者多个线程,多线程可以提高CPU的利用率,但是一直没明白,是怎么提高的。多任务和多线程到底有什么区别和联系,请大神们解答下,百度了下回答五花八门的,但是最终不过一个结论,提高cpu的利用率

相关帖子

沙发
dqgcs123| | 2015-4-15 12:32 | 只看该作者
本帖最后由 dqgcs123 于 2015-4-15 12:35 编辑

你可以把多进程看成是一个个的函数,要依次运行,而多线程则是把这些函数设置成中断处理函数,而且可以互相打断,打断的原因就是为了提高速度,因为它们的内存是共享的

使用特权

评论回复
板凳
风雪残月| | 2015-4-15 12:45 | 只看该作者
学习一下~

使用特权

评论回复
地板
lxyppc| | 2015-4-15 13:28 | 只看该作者
那是因为要处理的事情比处理器运算能力低
所以提高了利用率

使用特权

评论回复
5
xmar| | 2015-4-15 14:17 | 只看该作者
多任务: 一台电脑可同时运行多个应用程序(多个进程)。

进程: 一个应用程序就是一个进程。

线程: 一个进程可以同时由多个cpu内核并行执行。即多线程运行。例如,一个进程做整数1,2,3,。。N连续相加,可以用一个线程(一个cpu内核)做奇数的加法,另一个线程(另一个cpu内核)做偶数的加法,这样整个进程的速度会提高2倍。但多线程编程比单线程复杂得多。操作系统并不能自动利用多核cpu提高程序运行速度。因此,对于单核CPU多线程意义不大。

使用特权

评论回复
6
hclwj181|  楼主 | 2015-4-15 15:08 | 只看该作者
dqgcs123 发表于 2015-4-15 12:32
你可以把多进程看成是一个个的函数,要依次运行,而多线程则是把这些函数设置成中断处理函数,而且可以互相 ...

我的理解是一个操作系统应用由多个任务组成,而每个任务又由n个线程去执行,这样 每个任务就可以同步执行几种事情了,不知道这样的理解对不对

使用特权

评论回复
7
dqgcs123| | 2015-4-15 16:10 | 只看该作者
hclwj181 发表于 2015-4-15 15:08
我的理解是一个操作系统应用由多个任务组成,而每个任务又由n个线程去执行,这样 每个任务就可以同步执行 ...

我对多任务就不了解了

使用特权

评论回复
8
加油吧小鱼儿| | 2015-4-15 20:00 | 只看该作者
xmar 发表于 2015-4-15 14:17
多任务: 一台电脑可同时运行多个应用程序(多个进程)。

进程: 一个应用程序就是一个进程。

恩,Java书上也是这么说的~

使用特权

评论回复
9
ghost2| | 2015-4-16 08:27 | 只看该作者
进程间切换涉及到物理内存的重新加载、映射,而线程间切换不会

使用特权

评论回复
10
hclwj181|  楼主 | 2015-4-16 09:00 | 只看该作者
加油吧小鱼儿 发表于 2015-4-15 20:00
恩,Java书上也是这么说的~

但是操作系统原理貌似不是这样的,特别是linux,现在的很多arm芯片跑linux都是单核,一样涉及到了线程的

使用特权

评论回复
评论
xmar 2015-4-16 09:38 回复TA
Windows OS同样也有单核CPU的多线程,但这种多线程是分时执行的,而不是多核CPU真正意义上的并行同时执行代码。 
11
科技猎人| | 2015-4-16 09:08 | 只看该作者
每个任务有一个独立的内存空间,对于没有MMU的处理器就只能实地址访问,也就只能有一个内存空间了,而有MMU的则可以有多个虚地址访问内存空间。一个任务内可以有一到多个线程,每个线程有独立的堆栈,有了独立堆栈就意味着线程间可以自由切换和抢占。

使用特权

评论回复
12
ZhangStudy| | 2015-4-16 09:26 | 只看该作者
进程是一个独立的实体,它具有自己的内存空间,自己的资源,也可以拥有多个CPU执行线索(执行绪),这些执行线索就是线程。
不同的进程互不干扰,各自在自己的空间中运行,操作系统负责隔离。 因此,进程间如果需要共享某些东西,必须操作系统干预,代价很大。
多个线程共享它们所属进程的所有资源,内存啦,打开的设备啦,操作系统主动不负责线程共用资源的冲突,由线程们自己解决。  对于C语言来说,多个线程共享公共变量,共享申请的动态空间。只有局部变量是线程私有的(必须是非静态的局部变量)。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

720

帖子

9

粉丝