多进程一定比不上多线程么?

你这说的我听着都头大。
不过话说回来,这事儿我还真踩过坑。

记得有年我在做那个电商后台系统,服务器老是崩。
一查,好家伙,是线程出问题了。
你想想,那可是几百个线程在抢着处理订单,共享内存搞得一锅粥,没几分钟就死几个线程,最后整个服务就挂了。
我当时就懵了,这写代码的时候怎么就没发现啊?后来没办法,硬着头皮改成每个订单用一个新进程处理。
嘿,还真管用。
虽然内存占用上有点心疼,但至少系统稳当了。
这事儿就说明了,线程虽然快,但要是搞不好同步,那不稳定啊。
你想想,当年那个项目,几百个用户同时下单,要是用线程,那数据错乱的场面,啧啧。

再说了,我之前搞过个图像处理的小工具。
那活儿可吃CPU了,一张图处理半天都算快的。
我一开始想着用线程,结果发现,创建那么多个线程,系统都跟烫手山芋似的。
后来改用进程,每个进程处理一张图,虽然内存开销大了点,但速度是真快。
你想想,那可是好几百张图,用进程分着处理,最后比单线程快了小半宿。
这例子就告诉你,不是线程一定比进程慢,关键看你的任务吃不吃CPU,还有你那机器有几核。

所以啊,这事儿真不能一概而论。
你要是搞个高并发的Web服务器,处理那种短连接,那用线程肯定没错,我以前搞那个新闻推送系统就是,用户多的时候,线程跑得飞快。
但你要是处理那种需要隔离的任务,比如运行一些不靠谱的第三方代码,那还是进程保险。
我之前就试过把一个老古董的C语言库用进程封装起来,结果那库一崩溃,我的程序也没跟着完犊子。

总的来说,多进程和多线程,就像是你问我该用锤子还是螺丝刀,得看你要钉钉子还是拧螺丝。
你要是钉墙上的钉子,那锤子肯定行;你要是拧柜子上的螺丝,那螺丝刀才是正解。
这事儿啊,真得根据你的具体需求来挑。

进程和线程的区别

进程是资源分配单位。
线程是CPU调度单位。
进程切换开销大。
线程切换开销小。
进程有独立内存。
线程共享进程内存。
线程是进程一部分。
一个进程至少一个线程。
多线程可并发执行。
进程有PCB、代码、数据段。
线程有独立栈、PC。
系统为进程分配内存。
线程不独立分配内存。