多进程和多线程到底有啥区别

我不是专家。每个进程都至少有一个线程。 一般,系统创建一个进程的开销是比较大的,需要分配内存,内核资源等等。 不同进程间无法直接共享彼此拥有的这些资源。而我们可以在同一进程内创建多个线程,这些线程相对来说‘轻量级’很多,它们可以共享所在进程的各种资源。首先,粗略的说,你可以认为线程是 个‘轻量级’进程。用多线程模式,你可以很轻松的 实现 并行。 即,在多核 的设备上(如你有4核cpu), 你可以开4个线程,以便这4个核 能同时 为你这个 进程 的工作服务。多进程没什么经验,以下是我的想法:多进程 相对多线程而言,里面每一个进程都更加独立, 它们可以不再同一个机器上。它们执行的代码也不同。 比如你找到了两个开源项目来为你的 某个功能服务,如果时间紧迫,,你可以开两个进程运行这两个项目,然后把结果传给你自己的 进程。 进程间数据传输方式很多, 简单的 可以写文件,用端口,,复杂的google下~~. 而且,你也可以配置成分布式系统,这个机器跑一个集成,另一个机器跑另一个等等。以上个人浅见。 坦白讲,我依然对进程和线程存有很多疑惑,我觉得如果想真正了解,先学操作系统原理
■网友
说说我的理解,之前为了完成一个小工具,因为要调用现有的程序,所以在小工具里不断的创建进程,多线程也经常用,非科班,请大拿指教。进程是线程池,每个进程都有自己的虚拟地址空间,进程里的资源,可以通过这个地址空间来访问,同一个进程里的线程共享该进程的地址空间,所以,同一进程下的线程,资源可以共享。当线程退出后,它所分配的资源,如果没有释放,也没把地址告诉其他线程,这些资源仍然在它所属进程的地址空间,只是不知道地址,就无法访问了,即资源“泄露”了。进程,有父进程和子进程,所有的进程都是init进程的子进程,或者是init进程的子进程的子进程的子进程……,在进程里可以开进程,但不同进程的地址空间是不同的,所以不同进程不能直接访问对方的资源,在进程结束后,子进程的资源会被父进程释放掉,如果父进程先于它死亡,它的资源在退出时会被系统回收,所以,创建线程来完成小的任务,不用担心资源泄露。有人说,那多好啊,我再写不用来free.delete,每次新开个进程来完成,这里有个问题,创建进程的开销会比较大,这很影响速度;此外,进程之间不能直接访问,小的任务完成,结果要传回来,可以用套接字,共享内存等方法,实现进程间通信,这一套机制可没写几句内存释放简单;最后,进程的资源回收,父进程是要管理的,不是父进程创建好进程,子进程退出就自动释放资源了。综上,进程是一个线程池,同一个进程里的资源,线程可以直接的访问,进程在资源就一直在。进程可以看成各个不同的池,相互之间要通过媒介才能访问,进程退出后,资源会被父进程或系统回收。
■网友
这本来就不是一个简单的问题。要说清楚了,就必须解决一下问题:1.线程和进程是怎么来的? 操作系统给创建的。2.操作系统是干什么的呢? 调度和资源管理的(当然还有各种各样的功能和取舍)。3.为啥要用进程?不用可不可以?用了有啥好处?用了有啥劣势?4.能不能同时有两个进程?宏观上能不能同时执行?微观上能不能同时执行?5.有两个或更多进程的时候,会有什么问题?6.为啥要有线程?多个线程比多个进程的优势在哪里,缺点在哪里?到了这里,多进程和多线程的区别,不就很清楚了嘛。
■网友
《现代操作系统》里的进程章节有讲


    推荐阅读