进程vs线程,如何选择?
2011-04-25 23:17
113 查看
进程vs线程,如何选择?
我们编写程序,到底是采用多线程还是多进程?这里是有区别的,采用不同的机制能够获得的效率也不一样。如何选择适合我们自己的程序的机制呢?下面是一些常见的选择的看法,不过也只是提供给大家参考参考,具体设计的时候还是要自己处理。
¨ 一个程序里面的所有的线程都在同一个运行空间中执行。而一个程序的子进程则是运行在另外的执行空间中的,这里是通过调用了exec函数来实现的。
¨ 同一个进程中的某个线程的故障可以影响其它的线程,因为所有的线程共享同一个虚拟内存空间以及其他资源。例如,某个线程对没有初始化的指针进行写操作,就可能影响其它的线程。而一个出了问题的进程是不会影响其它的进程的,因为它们分别在不同的进程空间进行自己的操作。
¨ 创建新的进程需要进行内存的拷贝操作,这就额外的增加了系统负担,而线程则不需要这个拷贝过程。不过由于现在的操作系统的实现是仅仅当内存需要改变的时候才拷贝改动的部分,所以这里的影响相对还是比较小的。
¨ 线程通常用在某些需要比较好的同步操作的场合。例如,某个问题可以分解为多个几乎对等同步处理的任务的话,则是用线程是很好的选择。进程则适合应用在不需要严格的同步的场合。
¨ 线程之间共享数据是很方便的,因为不同的线程本来就是共享同样的存储空间。(然而这里就要非常仔细的处理竞争的情况。)而不同进程之间共享数据则需要使用一些ipc机制,例如管道、共享内存、套接字等等。
我们编写程序,到底是采用多线程还是多进程?这里是有区别的,采用不同的机制能够获得的效率也不一样。如何选择适合我们自己的程序的机制呢?下面是一些常见的选择的看法,不过也只是提供给大家参考参考,具体设计的时候还是要自己处理。
¨ 一个程序里面的所有的线程都在同一个运行空间中执行。而一个程序的子进程则是运行在另外的执行空间中的,这里是通过调用了exec函数来实现的。
¨ 同一个进程中的某个线程的故障可以影响其它的线程,因为所有的线程共享同一个虚拟内存空间以及其他资源。例如,某个线程对没有初始化的指针进行写操作,就可能影响其它的线程。而一个出了问题的进程是不会影响其它的进程的,因为它们分别在不同的进程空间进行自己的操作。
¨ 创建新的进程需要进行内存的拷贝操作,这就额外的增加了系统负担,而线程则不需要这个拷贝过程。不过由于现在的操作系统的实现是仅仅当内存需要改变的时候才拷贝改动的部分,所以这里的影响相对还是比较小的。
¨ 线程通常用在某些需要比较好的同步操作的场合。例如,某个问题可以分解为多个几乎对等同步处理的任务的话,则是用线程是很好的选择。进程则适合应用在不需要严格的同步的场合。
¨ 线程之间共享数据是很方便的,因为不同的线程本来就是共享同样的存储空间。(然而这里就要非常仔细的处理竞争的情况。)而不同进程之间共享数据则需要使用一些ipc机制,例如管道、共享内存、套接字等等。
相关文章推荐
- 使用VS附加到进程的时候如何选择正确的W3WP进程
- Linux上如何查看某个进程的线程
- python3学习笔记:进程VS线程
- 如何设置进程(线程)在指定的CPU上运行
- 如何调用VS自带的数据源选择对话框
- Linux 如何查看进程的各线程的CPU占用
- C#.NET常见问题(FAQ)-在VS程序如何取消.vshost的进程
- 并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器
- 如何实现利用类成员函数创建线程 选择自 iceezone 的 Blog
- VS调试“附加到进程”时有多个相同w3wp.exe时不知选择哪一个的解决方法
- vc/mfc 进程消息队列,线程消息队列,和系统消息队列,该如何处理
- [转] 如何突破Windows系统单进程最大线程数2000的限制
- Android中进程与线程及如何在子线程中操作UI线程
- 如何让VS根据编译环境选择相应的配置文件
- .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时(翻译)
- 进程vs线程
- Win8任务管理器如何显示更多信息如进程句柄、线程等等
- 进程 vs 线程 :一个进程可以包含多个线程
- 如何设置进程(线程)在指定的CPU上运行
- 在 VS 中如何选择 BMP 工程的编译器