多任务和多线程的区别

[复制链接]
2981|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 来自手机 | 显示全部楼层
那是因为要处理的事情比处理器运算能力低
所以提高了利用率
xmar 发表于 2015-4-15 14:17 | 显示全部楼层
多任务: 一台电脑可同时运行多个应用程序(多个进程)。

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

线程: 一个进程可以同时由多个cpu内核并行执行。即多线程运行。例如,一个进程做整数1,2,3,。。N连续相加,可以用一个线程(一个cpu内核)做奇数的加法,另一个线程(另一个cpu内核)做偶数的加法,这样整个进程的速度会提高2倍。但多线程编程比单线程复杂得多。操作系统并不能自动利用多核cpu提高程序运行速度。因此,对于单核CPU多线程意义不大。
 楼主| hclwj181 发表于 2015-4-15 15:08 | 显示全部楼层
dqgcs123 发表于 2015-4-15 12:32
你可以把多进程看成是一个个的函数,要依次运行,而多线程则是把这些函数设置成中断处理函数,而且可以互相 ...

我的理解是一个操作系统应用由多个任务组成,而每个任务又由n个线程去执行,这样 每个任务就可以同步执行几种事情了,不知道这样的理解对不对
dqgcs123 发表于 2015-4-15 16:10 | 显示全部楼层
hclwj181 发表于 2015-4-15 15:08
我的理解是一个操作系统应用由多个任务组成,而每个任务又由n个线程去执行,这样 每个任务就可以同步执行 ...

我对多任务就不了解了
加油吧小鱼儿 发表于 2015-4-15 20:00 | 显示全部楼层
xmar 发表于 2015-4-15 14:17
多任务: 一台电脑可同时运行多个应用程序(多个进程)。

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

恩,Java书上也是这么说的~
ghost2 发表于 2015-4-16 08:27 来自手机 | 显示全部楼层
进程间切换涉及到物理内存的重新加载、映射,而线程间切换不会
 楼主| hclwj181 发表于 2015-4-16 09:00 | 显示全部楼层
加油吧小鱼儿 发表于 2015-4-15 20:00
恩,Java书上也是这么说的~

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

评论

Windows OS同样也有单核CPU的多线程,但这种多线程是分时执行的,而不是多核CPU真正意义上的并行同时执行代码。  发表于 2015-4-16 09:38
科技猎人 发表于 2015-4-16 09:08 | 显示全部楼层
每个任务有一个独立的内存空间,对于没有MMU的处理器就只能实地址访问,也就只能有一个内存空间了,而有MMU的则可以有多个虚地址访问内存空间。一个任务内可以有一到多个线程,每个线程有独立的堆栈,有了独立堆栈就意味着线程间可以自由切换和抢占。
ZhangStudy 发表于 2015-4-16 09:26 | 显示全部楼层
进程是一个独立的实体,它具有自己的内存空间,自己的资源,也可以拥有多个CPU执行线索(执行绪),这些执行线索就是线程。
不同的进程互不干扰,各自在自己的空间中运行,操作系统负责隔离。 因此,进程间如果需要共享某些东西,必须操作系统干预,代价很大。
多个线程共享它们所属进程的所有资源,内存啦,打开的设备啦,操作系统主动不负责线程共用资源的冲突,由线程们自己解决。  对于C语言来说,多个线程共享公共变量,共享申请的动态空间。只有局部变量是线程私有的(必须是非静态的局部变量)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

721

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部