进程与线程的区别

进程是程序执行的一个实例,线程是进程执行的一个单位。

进程有独立的地址空间,被线程共享。

进程资源使用率高,线程数低。

进程通信成本高,线程直接读写共享内存。

进程切换的成本很高,而且线程很小。

进程的创建和销毁很慢,而线程的创建和销毁很快。

进程适合高隔离,线程适合高并发。

进程崩溃不会影响其他进程,线程崩溃会导致进程崩溃。

简述线程与进程的区别及优缺点

你问了这个问题,我给你讲讲我当年掉过的坑。

我记得有一年,我在做一个项目时,服务器只有几个内存区域,所以我必须保存它。
当时我创建了多个进程,因为我认为进程隔离就很好,如果一个崩溃了,另一个也不会受到影响。
结果呢?如果进程太多,CPU会挂起切换,需要添加多个线程来分担负载。
最后每天监控运维,把内存和CPU彻底耗尽。
你觉得这些成本高吗?
另一方面,后来有一个小程序,运行一个进程并在其中使用多个线程。
它启动很快并且易于使用。
但是,如果一个线程挂起,整个程序就会挂起并变得无法使用。
这个教训也是真实的。

所以你看,独立的进程地址空间很好,但是进程之间的通信和切换需要开销。
线程共享地址空间,速度很快。
但是,如果其中一个线程失败,则两个线程也会失败,这是不安全的。
这件事确实要看情况。

多进程就像建造多条独立的高速公路,每条高速公路都有自己的道路。
虽然修路成本很高,但路上不会出现堵车的情况。
多线程意味着走在街上,每个人在不同的时间行走并在红绿灯处停下来。
价格便宜,但是要等。

在UNIX环境中,调度多个进程的成本并没有你想象的那么过高。
我在一个具有数百个进程的特定系统上运行,调度很好并且没有挂起。
但这也是特定的环境。

现在有了足够的RAM,服务器可以轻松运行数十或数百GB。
如果你真的想运行多个进程,只要你不把全局变量弄乱太多就可以了。
但是,如果有一个进程消耗大量内存,您仍然需要小心。

总结一下:不要一看就说不是多进程、多线程。
这取决于您从事什么类型的工作。
如果安全性要求较高,可以在一个进程中使用多个线程来完成此操作。
如果需要隔离,请使用多个进程,但不要太多。
这些都是真实的故事,我也经历过很多坑,至少可以让你少走一些弯路。

进程和线程的区别是什么?

后来我才发现……这件事还挺复杂的。

看...进程和线程...它们是不同的。

进程是一个程序...运行时的活动。
它是系统为您分配资源、调度任务的基本单位。
比如2 02 2 年……在某个城市……推出了一场大型游戏……这个游戏是一个过程。
系统必须为其分配内存和CPU时间。

线程呢...它是进程中的一个小单元。
这是操作系统可以调度的最小单位。
就像......在你的大型游戏中......也许一个角色正在运行......另一个角色正在与怪物战斗......这两个角色都是线程。

工作原理也不同。
早期的计算机……可能更加面向过程。
进程是基本的执行单元。
现在......它更加面向线程。
进程有时只是一个容器……里面有线程。
程序是什么?指令、数据……过程是程序的一个单元。
线程是独立调度和分派的基本单位。

内核线程...用户线程...混合调度...这些听起来很烦人。
在Windows系统中...线程可以是内核线程。
在 Linux 中...可能是 POSIX 线程。
在 Windows 7 中...内核和用户进程的混合调度。

任务也不同。
进程是操作系统最基本、最重要的概念。
多道程序设计系统...为了描述系统的内部动态...引入了进程的概念。
所有多道程序操作系统都基于……进程。
就像 2 02 2 年……某个服务器...同时运行数据库和Web服务...这些都是进程。

一个进程可以有多个线程。
线程可以使用进程的资源。
操作系统引入了线程……通常进程仍然是分配资源的基本单位。
线程是独立运行、独立调度的基本单位。

我当时就很困惑……这里的关系相当复杂。

进程和线程的区别

我记得上次帮邻居Lao Vuong修电脑时,他总是说电脑慢。
我打开任务管理器,看到后面跟着七八个进程,比如浏览器、杀毒软件、系统进程等。
看得人头晕目眩。
老王问,这到底是什么东西,能关掉多少个?我告诉你,你必须明白浏览器和杀毒软件是独立的进程。
如果关闭其中一个,另一个仍然可以使用。
但如果系统进程被关闭,电脑可能会卡在PPT中。
这时,老国王又问道,如果这些窗户一一变慢,是不是可以关闭呢?我说这要看情况。
如果都在同一个浏览器中打开,则称为多任务处理。
事实上,浏览器进程仍在运行。
如果关闭一个窗口,其他窗口仍然可以使用。
但如果你打开多个浏览器,实际上会有多个进程。
如果您关闭一个浏览器,其他浏览器必须先退出。
等等,还有一件事,我不使用多个主题。
记得上次读一本编程书,里面说一个进程中可以开启多个线程,就像厨房(进程空间)里的厨师(进程)可以同时煮多个菜(线程),但菜谱(代码)是共享的,但每个菜都有自己的锅碗瓢盆(运行栈和PC)。
这和老王说的似乎有些相似。
一锅(处理)中可以有很多盘(纤维),但只有一锅(处理空间)。
不过话说回来,做饭效率(流执行)比换炉子(流程转换)更容易吗?