打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[每日一题]进程和线程的区别

这是个老生常谈的问题,因为它真的会经常被问到:)

进程 vs 线程

进程可以认为是应用程序运行时的一个实例。比如你双击word的图标,你就启动了一个进程来运行word程序。而线程,是进程中的一段执行路径,一个进程可以包含多个线程。当你运行word的时候,操作系统就会创建一个进程,并且开始执行这个进程的主线程。

一个线程可以做进程可以做的所有的事情。因为一个进程可以包含多个线程,我们可以认为一个线程是个轻量级进程。所以,进程和线程的主要区别,是看用他们来做什么任务,线程通常用来完成一些小任务,而进程,通常用来完成一些重量级任务(最基本的就是应用程序的执行)。

二者之间的另一个重要区别是同一个进程的多个线程之间,共享相同的地址空间,而进程之间是不会共享的,他们有自己独立的进程空间。这使得多个线程之间可以共享同一个数据结构或变量,使相互之间的交互更容易。而进程之间的通信,我们通常称之为IPC,是另外一种机制,是相对比较耗费资源的

多线程

说到线程,必然要提到多线程。一个比较具象的例子可以想象一下你使用word的过程,有个线程在接收你的输入,有个线程在检查你单词的拼写,还可以有个线程在做打印。

如果应用程序是单线程的,那么在同一时刻,就只能做一件事情,想在一个单线程的程序中既做打印,同时又对用户输入做应答,这显然是不可能的。

之前我们提到,每个进程有自己的地址空间,同一个进程的多个线程之间是共享该进程的地址空间的,他们还会共享一些其他资源,这使得线程之间共享数据非常简单。但如果多个线程不加控制的对共享的数据同时发起读写,肯定就乱掉了……

所以在多线程编程的时候,我们要格外小心。多个线程修改共享数据的那个代码段,我们称之为临界区。当有一个线程进入临界区开始执行的时候,其他线程不允许再进入临界区。这涉及到同步、互斥相关的一些知识点,不是本文要关注的重点。

另一点区别是,线程的上下文切换要比进程的上下文切换廉价得多。

OK,我们来个总结,进程与线程的区别:

  • 1、线程不需要独立的地址空间,创建起来比进程简单廉价,上下文切换也比进程廉价
  • 2、由于线程之间共享的数据在某一时刻只允许一个线程修改,这需要在多线程编程的时候非常谨慎,而进程之间相互不共享数据
  • 3、因为线程占用的资源比进程少得多,线程被认为是轻量级进程
  • 4、一个进程可以包含多个线程

本文来自微信公众号:it_mianshiti

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
面试总结
线程,进程,程序的区别
多线程
编程思想之多线程与多进程(2)——线程优先级与线程安全
JAVA多线程(一)基本概念和上下文切换性能损耗
多线程是程序员不加班的神器!Python多线程最全总结!永不加班!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服