`

科普帖:线程与进程

阅读更多

这么解释问题吧:

  1. 单进程单线程:一个人在一个桌子上吃菜。
  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 服务器的原因。

 

本文整理自我在 segmentfault 的问答。

15
9
分享到:
评论
10 楼 mz0827 2013-09-18  
kuchaguangjie 写道
进程: process
线程: thread


thread 属于 1个 process,
1个 process 可以有多个 thread,

同1个 process 的 threads 共享资源, 除了 stack, local variable,

jvm 相当于 1个 process,
1个java Thread 相当于 1个 thread,


感觉1楼说的  比  楼主的还要精辟。
9 楼 home198979 2013-09-18  
iteye真没有好文章了么?这种文章还放首页,服!!!
8 楼 caizi12 2013-09-18  
有没有更深入的普及,例如就讲讲java的进程和线程,线程到底是什么东西,怎么运行等相关的,一直对线程理解不了,一个jvm实例是不是就一个main线程,什么时候会创建一个新的线程,好多不明白。
7 楼 ray_linn 2013-09-18  
光填写数据不能等同于windows CreateProcess, 要等价必须进行代码段替换。

你这个帖子说得太浅了,请参考:

http://blogs.ejb.cc/archives/969/comparison-of-the-process-of-linux-and-windows
6 楼 ray_linn 2013-09-18  
fork 和 windows createprocess不能等同,你必须测试fork/exec才等于windows create process.
5 楼 wlxlz 2013-09-18  
谢谢lz分享,真的是豁然开朗
4 楼 timer_yin 2013-09-18  
非常不错 通俗易懂
3 楼 Jack_ljk 2013-09-18  
看来windows应用要升级了,不然就要被淘汰。
2 楼 artdialog 2013-09-18  
太精辟了,通俗易懂。
1 楼 kuchaguangjie 2013-09-17  
进程: process
线程: thread


thread 属于 1个 process,
1个 process 可以有多个 thread,

同1个 process 的 threads 共享资源, 除了 stack, local variable,

jvm 相当于 1个 process,
1个java Thread 相当于 1个 thread,

相关推荐

    2.2多线程应用程序设计

    在编程领域,多线程应用程序设计是至关重要的一个主题,特别是在现代计算机系统中,多核处理器的普及使得并发执行成为提升程序性能的有效手段。本文将深入探讨多线程应用程序设计的基础概念、优缺点以及实现方法,...

    java线程.pdf

    在计算机科学领域中,进程与线程的概念至关重要。进程是指操作系统中可并发执行的程序实例,而线程则是在进程中执行的一个控制单元,也是进程内的可调度实体。随着多核处理器的普及,多线程编程成为提高程序性能的...

    多任务的优点 进程 线程

    本文将深入探讨多任务的概念、进程与线程的区别以及它们在编程,特别是VC(Visual C++)环境中的应用。 首先,多任务是指计算机系统能够同时处理多个任务的能力。这种能力使得用户可以在听音乐的同时浏览网页,或者...

    科普:多线程与异步的区别

    多线程与异步编程是现代计算机科学中非常重要的两个概念,它们都旨在提高程序的执行效率和响应速度。尽管两者有着共同的目标,但它们在本质和使用上都有着不同的特点。 首先,了解异步操作的本质是理解这一区别的...

    13多线程与多核编程整理.pdf

    在计算机科学中,多线程与多核编程是提高系统性能和效率的重要技术。本篇文档主要围绕这一主题展开,讲解了进程、线程以及多核环境下的并发计算。 13.1 进程与线程 13.1.1 多任务与进程 多任务处理是现代操作系统...

    java多线程入门

    **进程与线程** - **进程**:是程序的一次执行过程,具有独立的地址空间和系统资源。每个进程都有自己的内存空间和其他资源,如打开的文件和系统调用表。进程是操作系统进行资源分配的基本单位。 - **线程**:是...

    LabWindows™CVI中的多线程技术 - National Instruments.pdf

    3. **利用多处理器提高性能**:随着多核处理器的普及,多线程编程成为充分利用硬件资源的重要手段之一。通过在不同的处理器上并行执行不同的线程,可以显著加快程序的执行速度,特别是在需要大量计算资源的任务中。 ...

    并发编程——线程基础.pdf

    进程与线程的关系中,可以发现进程拥有独立的地址空间,不同的进程之间的虚拟地址空间是相互独立的,而同一进程内的多个线程则共享相同的地址空间。这种结构让线程成为轻量级的进程,因为它们几乎不拥有系统资源,...

    下载 多线程编程技术开发资料 高清完整PDF版

    多线程编程技术是计算机科学中的一个重要分支,它允许多个线程同时在单个CPU或CPU核心上执行,以提高程序的执行效率和响应速度。在多线程编程中,一个进程可以创建多个线程来执行不同的任务或相同的任务,以实现并行...

    非多线程操作系统课设

    操作系统是计算机科学中的核心课程,它管理并控制计算机硬件与软件资源,为用户提供高效、便捷的服务。本项目名为“非多线程操作系统课设”,显然,重点在于理解单线程操作系统的概念及其工作原理,而非现代多线程...

    关于编程知识--进程的科普

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 1、假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-...

    基于VC多线程的实时数据采集系统

    - **背景与重要性**:随着计算机技术的发展,特别是多核处理器的普及,多线程技术成为了提高软件性能的关键手段之一。在实时数据采集系统中,通过合理利用多线程技术可以显著提升数据处理的速度和准确性,特别是在...

    MultiThreading1:了解多线程概念

    在多核处理器的普及下,多线程已经成为实现并发执行、提高系统效率的关键技术。本文将深入探讨多线程的基本概念,以及它在实际应用中的作用。 首先,我们要理解什么是线程。线程是操作系统分配CPU时间的基本单元,...

    Modern Operating Systems

    《现代操作系统》是计算机科学领域内一本极具影响力的教材,由著名计算机科学家Andrew S. Tanenbaum编写。这本书自第二版起就广受读者欢迎,它深入浅出地探讨了操作系统的设计原理和实现技术。以下将根据书中提供的...

    英特尔超线程技术现代高性能CPU运行的奥秘.pdf

    随着多核CPU的普及,超线程技术也在不断发展,如今已能够在多核处理器上为每个物理核心提供两个逻辑处理器,进一步提升了多任务处理和并行计算的效率。 综上所述,英特尔超线程技术是现代高性能CPU运行的重要组成...

    多线程编程经典锦集

    多线程编程是现代计算机科学中的重要组成部分,尤其在多核处理器普及的今天,利用多线程进行并发处理已成为提升软件性能的常见手段。 一、多线程基础 多线程是指在一个进程中可以同时运行多个独立的执行流,每个...

Global site tag (gtag.js) - Google Analytics