子进程和线程的区别?

nalfs 2001-10-18 02:53:32
在WINDOWS中,当一个进程需要由另一个实体去执行某件事时,往往是创建一个线程,让该线程去处理;而在LINUX/UNIX中,往往是该进程派生一个子进程,让子进程去处理。
问题:让子进程去处理和让线程去处理各有什么好处?在什么情况更适合用子进程,什么情况更适合用线程?
请各高手指点。谢谢!
...全文
1015 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fiven_Luo 2001-10-20
  • 打赏
  • 举报
回复
子进程有自己的资源,比线程独立于父进程,可以在父进程退出后执行,如LINUX的守护进程就是这样的,线程使用的是父进程的资源,在父进程退出后跟着退出。
kuai_kevin 2001-10-19
  • 打赏
  • 举报
回复 1
进程复制代码段和数据段,线程共享代码段,只复制数据段,因此线程效率高。但进程之间没有干扰,编程时比较方便,不用考虑加锁同步之类的。
类库 2001-10-19
  • 打赏
  • 举报
回复
进程和线程的效率高低似乎决定于所用的操作系统,windows的图形界面下创建线程比进程高效,而unix/linux下似乎是用多进程的多一点。
Last_Dodo 2001-10-19
  • 打赏
  • 举报
回复
进程间没有共享。线程间只有栈不共享。进程除了栈外还有很多东西(不在此列出因为从不同的角度看会有不同)。线程对栈外的数据操作应特别小心因为其它线程也可能在用(所以常用到锁和条件变量)。
fsheron 2001-10-18
  • 打赏
  • 举报
回复
线程运行在同一地址空间,而进程不是。
tjm 2001-10-18
  • 打赏
  • 举报
回复
xuexi
shy007 2001-10-18
  • 打赏
  • 举报
回复
系统资源分配给进程,而线程只有cpu资源和一些必须的栈和寄存器,所以进程切换比线程切换慢得多,如果是切换比较频繁的job的话,用线程。windows中进程只是资源管理者,不是真正的程序执行者,执行工作由线程完成,即使不显式产生线程,系统有一个缺省得主线程运行。
swat 2001-10-18
  • 打赏
  • 举报
回复
马和骡子的区别
net_star 2001-10-18
  • 打赏
  • 举报
回复
进程:
需要进程表,必须在系统中注册运行。 具有独立的环境变量存储区。
线程: 附属于一个进程,同其他线程共享进程打开的文件,Socket等待资源,共享环境变量。 可以这样认为,一个进程是有很多个线程组成的。
启动一个进程必启动一个线程速度慢地多,而且占用更多的资源,不过启动进程之间相互独立,并不因为一个进程死亡而全部覆没,不过进程间通讯是一件比较痛苦的事情。线程比较简单,可以容易的互相通讯,不过如果一个出现问题,那么进程退出,个÷什么都丢了。

选择进程还是线程,要根据实际需要,是否需要共享资源,之间的互操作是否比较多,是否需要大量的并行,等等,如果是这些的话,选择线程。负责,启动的任务之间资源共享比较少,任务间通讯比较少,那么选择进程。

在Unix中,系统会将一个进程分为多个LWP轻量级进程,其实同线程相当,一个线程基本上对应好几个LWp的。
beyond_ml 2001-10-18
  • 打赏
  • 举报
回复
具体应用中,线程和进程的使用远比一些书上介绍的要复杂的多。
进程中主要面对的问题是进程间通讯(数据不共享,但操作起来安全,很费资源)
线程中主要面对的问题是线程同步(数据共享,但操作起来不安全,节省资源)
然后就是具体问题,具体分析了。


ajiefudan 2001-10-18
  • 打赏
  • 举报
回复
线程对系统的消耗大大小于进程。
在Linux/Unix中也可以用线程处理。
不过在Linux中没有明确的线程的概念,它的线程就是轻进程。
如果你在Linux的进程中开了4个子线程,你用ps就可以看到6个相同的进程。

如果你处理的事相同,用fork,然后用IPC同步,
如果处理的事不同,那么用线程比较好,因为你可以对不同的情况开不同的线程来处理
hellion 2001-10-18
  • 打赏
  • 举报
回复
某些Unix不支持线程,线程是轻量级的进程?

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧