这么解释问题吧:
- 单进程单线程:一个人在一个桌子上吃菜。
- 单进程多线程:多个人在同一个桌子上一起吃菜。
- 多进程单线程:多个人每个人在自己的桌子上吃菜。
多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了。。。此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢。
-
对于 Windows 系统来说,【开桌子】的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜。因此 Windows 多线程学习重点是要大量面对资源争抢与同步方面的问题。
-
对于 Linux 系统来说,【开桌子】的开销很小,因此 Linux 鼓励大家尽量每个人都开自己的桌子吃菜。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法。
补充:有人对这个开桌子的开销很有兴趣。我把这个问题推广说开一下。
开桌子的意思是指创建进程。开销这里主要指的是时间开销。
可以做个实验:创建一个进程,在进程中往内存写若干数据,然后读出该数据,然后退出。此过程重复 1000 次,相当于创建/销毁进程 1000 次。在我机器上的测试结果是:
UbuntuLinux:耗时 0.8 秒
Windows7:耗时 79.8 秒
两者开销大约相差一百倍。
这意味着,在 Windows 中,进程创建的开销不容忽视。换句话说就是,Windows 编程中不建议你创建进程,如果你的程序架构需要大量创建进程,那么最好是切换到 Linux 系统。
大量创建进程的典型例子有两个,一个是 gnu autotools 工具链,用于编译很多开源代码的,他们在 Windows 下编译速度会很慢,因此软件开发人员最好是避免使用 Windows。另一个是服务器,某些服务器框架依靠大量创建进程来干活,甚至是对每个用户请求就创建一个进程,这些服务器在 Windows 下运行的效率就会很差。这"可能"也是放眼全世界范围,Linux 服务器远远多于 Windows 服务器的原因。
本文整理自我在 segmentfault 的问答。
相关推荐
科普知识:多核 vs 超线程.docx
主要介绍了科普:多线程与异步的区别,本文讲解了多线程和异步操作的异同、异步操作的本质、线程的本质、异步操作的优缺点、多线程的优缺点等内容,需要的朋友可以参考下
数学科普资料:阿基米德与圆周长圆面积.doc
中国房地产资产证券化研究系列之三:REITs科普二:美国基础设施REITs介绍.pdf
科普篇:SOC芯片研究框架.pdf
科普篇:不可不知的安全气囊.pdf
科普剧:《小公主游蔬菜王国》.docx
汽车常识科普之:刹车片多久更换一次合适.pdf
中国房地产资产证券化研究系列之一:REITs科普一:什么是标准的REITs
中国房地产资产证券化研究系列之三:REITs科普二:美国基础设施REITs介绍
我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 1、假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-...
中国房地产资产证券化研究系列之一:REITs科普一:什么是标准的REITs.pdf
#资源达人分享计划#
房地产-中国房地产资产证券化研究系列之四:REITs科普三:首批公募REITs有哪些特征?
房地产-中国房地产资产证券化研究系列之四:REITs科普三:首批公募REITs有哪些特征?.pdf
科普知识:通标的1G、2G、3G、4G、5G网络分别指什么?.doc
量子领域科普:量子纠缠与量子戏法.pdf
中国房地产资产证券化研究系列之四:REITs科普三:首批公募REITs有哪些特征?(2021)(32页).pdf
量子计算科普:量子计算教程与量子战略.pdf