线程与进程的区别:进程是分配资源的基本单位,线程是独立运行的控制流

说白了,进程和线程的核心区别就俩字:隔离程度。
这事复杂在细节上,但记住两句话就够用。

先说最重要的,进程是资源分配的"独栋别墅",每个都有独立地址空间和系统资源,去年我们跑的那个高并发项目,3 000量级时突然杀死的进程,发现居然要重启整个服务;而线程是进程里的"合租房",共享内存和文件描述符,但有自己的调用栈,我们之前写的一个文件处理模块,改成多线程后,切换开销直接降了6 0%。

另外一点,进程间通信(IPC)像寄快递,要开邮局、写地址,慢但靠谱;线程间通信像公司内部聊天,直接对讲机,快但容易内讧。
还有个细节挺关键的,Linux把线程当轻量级进程(LWP)管,所以你用ps看到的线程数,其实都是PID的变形,这点很多人没注意。

我一开始也以为线程越多性能越好,后来发现不对,线程数超过处理器核心数后,反而会因为锁竞争拖垮系统。
说实话挺坑的。

建议你在设计时,计算密集型用线程,IO密集型用进程,别傻乎乎全用线程,最后死锁死得明明白白。

进程和线程的区别

进程是独立运行的基本单位,线程是进程内的执行单元,共享资源但各自有栈空间。
线程可创建和撤销,可并发执行,更接近执行体。
进程独立地址空间,崩溃不影响其他进程,线程无独立地址空间,死掉即进程死。
多进程程序更健壮,但切换资源多,效率低。
共享变量并发操作用线程。