大家在平时使用电脑时,一定会用到进程和线程。那进程是什么呢?宽泛地说,进程就是你在任务管理器中看到的那些正开着的程序,就是程序的一次执行过程。那么线程又是什么呢?简单说,线程是进程内部真正干活的单位,它让你的程序能够同时做多件事,比如一边下
载文件一边显示进度条。
首先,创建进程的时候,系统会给进程分配一块虚拟内存空间,这块空间分为用户空间和内核空间,在用户空间里,至少会有一个线程
,它被称为主线程。接着调度器负责把线程分配给 CPU 执行。如果存在多个线程,CPU就会在它们之间来回切换,让你感觉这些任务在"同时"进行——这就是并发。
打个比方:进程像一个工厂,线程像工厂里的工人。工厂拥有自己的地盘(内存空间),工人在这块地盘上干活。所以真正执行任务的其实是
线程。
那进程什么时候才结束呢?我们可以先说线程:当主线程执行完 main() 函数后,会调用 exit(),这时整个进程就退出了,所有其他线程也会随
之终止。当然让进程结束还有另一种情况是,当所有线程都自然执行完毕退出后,进程也就跟着结束了——就像一个工厂没了工人,自然没有存在的必要啦。
最后,进程和线程最核心的区别是什么?我们之前说过,每个进程都会被分配一块独立的虚拟内存空间,拥有自己的内存地址。就像你平时
开了一堆程序,突然关掉其中一个两个,不会影响其他程序——进程其实也是这样的,这是因为进程之间内存是隔离的。但线程就不一样了,同一个进程内的所有线程共享一块内存地址,任何一个线程不小心踩坏了这块内存,其他线程全会遭殃。所以说,进程胜在隔离性好,一个挂了不影响别人。而线程胜在共享方便——既然共用内存,数据就是实时可见的,不需要额外的通信机制。但共享随之而来也带来了竞争问题,这就留给下一篇博客来说啦~

