科普帖:线程与进程

本文来自技术问答模块,问题地址:http://segmentfault.com/q/1010000000125280#a-1020000000148152java


这么解释问题吧:编程

  1. 单进程单线程:一我的在一个桌子上吃菜。segmentfault

  2. 单进程多线程:多我的在同一个桌子上一块儿吃菜。服务器

  3. 多进程单线程:多我的每一个人在本身的桌子上吃菜。微信

多线程的问题是多我的同时吃一道菜的时候容易发生争抢,例如两我的同时夹一个菜,一我的刚伸出筷子,结果伸到的时候已经被夹走菜了。。。此时就必须等一我的夹一口以后,在还给另一我的夹菜,也就是说资源共享就会发生冲突争抢。多线程

  1. 对于 Windows 系统来讲,【开桌子】的开销很大,所以 Windows 鼓励你们在一个桌子上吃菜。所以 Windows 多线程学习重点是要大量面对资源争抢与同步方面的问题。架构

  2. 对于 Linux 系统来讲,【开桌子】的开销很小,所以 Linux 鼓励你们尽可能每一个人都开本身的桌子吃菜。这带来新的问题是:坐在两张不一样的桌子上,说话不方便。所以,Linux 下的学习重点你们要学习进程间通信的方法。框架


补充:有人对这个开桌子的开销颇有兴趣。我把这个问题推广说开一下。工具

开桌子的意思是指建立进程。开销这里主要指的是时间开销。
能够作个实验:建立一个进程,在进程中往内存写若干数据,而后读出该数据,而后退出。此过程重复 1000 次,至关于建立/销毁进程 1000 次。在我机器上的测试结果是:学习

UbuntuLinux:耗时 0.8 秒
Windows7:耗时 79.8 秒

二者开销大约相差一百倍。

这意味着,在 Windows 中,进程建立的开销不容忽视。换句话说就是,Windows 编程中不建议你建立进程,若是你的程序架构须要大量建立进程,那么最好是切换到 Linux 系统。

大量建立进程的典型例子有两个,一个是 gnu autotools 工具链,用于编译不少开源代码的,他们在 Windows 下编译速度会很慢,所以软件开发人员最好是避免使用 Windows。另外一个是服务器,某些服务器框架依靠大量建立进程来干活,甚至是对每一个用户请求就建立一个进程,这些服务器在 Windows 下运行的效率就会不好。这"可能"也是放眼全世界范围,Linux 服务器远远多于 Windows 服务器的缘由。

justjavac微信公众号

相关文章
相关标签/搜索