文档章节

【科普帖】线程与进程

teardream
 teardream
发布于 2015/01/14 23:47
字数 715
阅读 15
收藏 1

justjavac(迷渡) 版权所有,转载请注明【http://blog.csdn.net/justjavac】


一、灵感来源

2013-09-17 | 题目来源 http://blog.csdn.net/justjavac/article/details/11801271

二、分析

   这么解释问题吧:

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

  2. 单进程多线程:多个人在同一个桌子上一起吃菜。

  3. 多进程单线程:多个人每个人在自己的桌子上吃菜。

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

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

  2. 对于 Linux 系统来说,【开桌子】的开销很小,因此 Linux 鼓励大家尽量每个人都开自己的桌子吃菜。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法。

三、补充


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

        开桌子的意思是指创建进程。开销这里主要指的是时间开销。        

可以做个实验:创建一个进程,在进程中往内存写若干数据,然后读出该数据,然后退出。此过程重复 1000 次,相当于创建/销毁进程 1000 次。在我机器上的测试结果是:

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

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

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

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

        本文整理自我在 segmentfault 的问答。来自:http://www.zhihu.com/question/1990176...


本文转载自:

teardream

teardream

粉丝 1
博文 27
码字总数 18019
作品 0
南京
私信 提问
Unix / Linux 线程的实质

线 程 线程与进程的比较 概述: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单...

cnyinlinux
2015/01/15
4.2K
2
操作系统中的进程与线程

简介 在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程。但是,现在的情况更多的情况下要求在同一地址空间下拥有多个线程并发执行。因此线程被引入操作系统。 为什么需要...

范大脚脚
2017/11/15
0
0
Linux线程简说

Linux线程简说 尹德位 2015 西安 本文内容臃肿,作者尽力在描述自己对线程的感悟,表达能力有限,敬请读者去其糟粕。 系统环境: RedHat Enterprise Linux 7.0 x86_64 内核版本: linux-4.1.0...

cnyinlinux
2015/11/26
308
0
linux程序设计之线程、进程和程序的简单比较

线程,进程和程序的简单比较 我对于线程,进程的概念一直都是比较模糊,最近整理了一下。总结起来就是,线程是进程的一部分,进程是程序的一部分。 线程的引入:例如,有一个Web服务器要进程...

捕风的xiao_k
2018/06/26
0
0
内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117
2018/06/19
65
0

没有更多内容

加载失败,请刷新页面

加载更多

将key=value转成对象形式

var params = {};testParan.split(',').forEach(item =>{ var tmpArr = item.split('='); Vue.set(params, tmpArr[0].trim(), tmpArr[1].trim());});Vue.set(params, 'sql', sql);......

沉迷代码我爱学习
29分钟前
4
0
什么是分立器件

  分立器件被广泛应用到消费电子、计算机及外设、网络通信,汽车电子、led显示屏等领域。   半导体产业中有两大分支:集成电路和分立器件。   集成电路   集成电路(integrated circ...

仙溪
39分钟前
5
0
kibana rpm安装

https://www.elastic.co/guide/en/kibana/6.2/rpm.html 下载对应的版本wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-x86_64.rpm 安装 rpm -ivh kibana-6.2.4-x86_64......

看的最远的地方
42分钟前
4
0
高防CDN相比较于高防服务器,为何更加稳定?

对于DDoS攻击,那些已经做过网站、平台的人应该知道,DDoS攻击是非常可怕的,因为这种攻击本质上不能防御,或者DDoS攻击只能被减轻,不能完全消除。DDoS,意思是“分布式拒绝服务”。它是一种...

云漫网络Ruan
43分钟前
5
0
线程SuspendThread() ResumeThread()的使用

SuspendThread():挂起线程 If the function succeeds, the return value is the thread's previous suspend count; otherwise, it is (DWORD) -1. ResumeThread():启动线程 If the functio......

rainbowcode
43分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部