多进程和多线程
2016-05-27 18:38
211 查看
我们都知道进程是操作系统资源分配的最小单位,而线程是CPU调度的最小单位。
先说说多线程的好处:
(1)可以把占据时间长的任务放到后台去执行;
(2)比如当用户点击按钮触发一个事件后,可以使用界面的进度条显示处理的进度;
(3)一个进程中有多个线程的话,可能相对的加快程序的执行;
下面来对比一下多进程和多线进程在各方面的优劣:
(1)数据共享和同步方面:
进程之间的数据是分开的,因此多进程需要使用IPC进行数据共享,数据同步方面相对而言简单;
线程属于同一个进程,因此共享数据很方便,也就造成了数据同步比较困难。
(2)在内存和CPU方面:
进程占用内存大,CPU切换起来消耗比较大;
线程暂用资源少,切换快捷方便,CPU利用率相对较高。
因此如果要频繁创建销毁或者频繁切换的任务,优先使用多线程。比如说web服务器,对应一个连接会创建一个线程进行响应。
(3)在可靠性方面:
多进程之间并不互相影响,可靠性比较高;
而一个进程挂掉,全部的线程都挂掉。
相对而言多进程编程实现比较简单,调试容易,而多线程相对而言比较复杂。如果是多机的分布式,可以优先考虑使用多进程,如果仅仅是多核运算,则优先使用多线程。
另外我们认为如果两个任务关联性比较小的话,我们可以使用多进程;而如果关联性比较大,而且存在一个任务比较轻量级而且需要快速启动或者切换,我们优先率使用多线程。
先说说多线程的好处:
(1)可以把占据时间长的任务放到后台去执行;
(2)比如当用户点击按钮触发一个事件后,可以使用界面的进度条显示处理的进度;
(3)一个进程中有多个线程的话,可能相对的加快程序的执行;
下面来对比一下多进程和多线进程在各方面的优劣:
(1)数据共享和同步方面:
进程之间的数据是分开的,因此多进程需要使用IPC进行数据共享,数据同步方面相对而言简单;
线程属于同一个进程,因此共享数据很方便,也就造成了数据同步比较困难。
(2)在内存和CPU方面:
进程占用内存大,CPU切换起来消耗比较大;
线程暂用资源少,切换快捷方便,CPU利用率相对较高。
因此如果要频繁创建销毁或者频繁切换的任务,优先使用多线程。比如说web服务器,对应一个连接会创建一个线程进行响应。
(3)在可靠性方面:
多进程之间并不互相影响,可靠性比较高;
而一个进程挂掉,全部的线程都挂掉。
相对而言多进程编程实现比较简单,调试容易,而多线程相对而言比较复杂。如果是多机的分布式,可以优先考虑使用多进程,如果仅仅是多核运算,则优先使用多线程。
另外我们认为如果两个任务关联性比较小的话,我们可以使用多进程;而如果关联性比较大,而且存在一个任务比较轻量级而且需要快速启动或者切换,我们优先率使用多线程。
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- C#实现多线程的同步方法实例分析
- C#线程间不能调用剪切板的解决方法
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- 简单对比C#程序中的单线程与多线程设计
- C#停止线程的方法
- 解析C#多线程编程中异步多线程的实现及线程池的使用
- C#子线程更新UI控件的方法实例总结
- C#多线程学习之(六)互斥对象用法实例
- C#线程队列用法实例分析
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- 分享我在工作中遇到的多线程下导致RCW无法释放的问题