线程与进程的区别以及对多线程并发的理解

转自:

http://blog.sina.com.cn/s/blog_12f5264ff0102v8eq.html

http://blog.csdn.net/suxinpingtao51/article/details/8113509

http://blog.csdn.net/cqkxboy168/article/details/9026205/

一、线程与进程的区别

先简单说说线程与进程的概念:

(1)进程是指一个内存中运行的应用程序,比如在Windows系统中,一个运行的exe就是一个进程。

(2)线程是指进程中的一个执行流程。

区别:

一个程序至少有一个进程,而一个进程至少有一个线程。一个应用程序可以同时启动多个进程。例如对于IE浏览器程序,每打开一个IE浏览器窗口,就启动了一个新的进程。而线程则是指进程中的一个执行流程,一个进程可以有多个线程,每个线程分别执行不同的任务,当进程内的多个线程同时运行时,这种运行方式就被称为并发运行。

另外,线程与进程还有一个非常重要的区别:每个进程在执行过程中都拥有独立的内存单元,而同一个进程中的多个线程则共享内存,从而极大地提高了程序的运行效率。

二、对多线程并发的理解

多线程并发只是表面和感觉上的并发,并不是实质上的并发。一个线程要运行,它必须占有CPU,而我们目前用的计算机大多都是单CPU的,所以一次最多只能有一个线程获取CPU并运行。

多线程的实质是“最大限度地利用CPU资源”,当某一个线程的处理不需要占用CPU而只需要和I/O等资源打交道时,让其他线程有机会获得CPU资源。这有点类似于“统筹方法”,例如让你打扫房子和烧水,要在最短的时间内做好这两件事,你一定会想到先把水烧上,然后在等水烧开的空闲时间中去打扫房子,而不是先打扫好了再去烧水,也不是先烧好了再去打扫,这个例子里面,你是那个唯一的CPU,而烧水和打扫就是两个线程。

虽然CPU只有一个,但是它在多个线程之间频繁切换,当切换的频率高到一定程度时,我们就感觉所有的线程在同时运行,于是感觉这多个线程是并发的。因此,并发并不是真的指多个线程同时运行,它仅仅只是形容一种现象。就好像说有些人是“铁人”一样,仅仅只是用于形容某个人不怕苦不怕累,像个“铁人”。

1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥
2. 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。
3. 同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。

其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。
4. 并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。从而可知,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。

5. 多线程:多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码。多线程可以实现线程间的切换执行。

6. 异步:异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。

异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。

为了对以上概念的更好理解举一个简单例子,  假设我要做 烧开水,举杠铃100下, 洗衣服 3件事情。

烧开水 这件事情,  我要做的事情为, 准备烧开水 1分钟, 等开水烧开 8 分钟 , 关掉烧水机 1分钟

举杠铃100下        我要做的事情为,  举杠铃100下  10分钟

洗衣服            我要做的事情为, 准备洗衣服 1分钟, 等开水烧开 5 分钟 , 关掉洗衣机 1分钟

单核情况下

同步的完成,我需要做的时间为 1+ 8 +1 + 10 + 1+ 5 +1 = 27 分

如果异步,就是在等的时候,我可以切换去做别的事情

准备烧开水(1) + 准备洗衣服(1) + 举50下杠铃 (5)分钟+ 关洗衣机 1分钟 + 举杠铃20下 (2)分钟+ 关烧水机 1分钟 + 举30下杠铃(3)分钟

1+1+5+1+2+1+3 =14 分钟

双核 异步 并行

核1  准备烧开水 1分钟+ 举杠铃50下(5)分钟+ 等待3分钟 + 关掉烧水机 1分钟

核2  准备洗衣服 1分钟+ 举杠铃50下(5)分钟+ 关掉洗衣机 1分钟 + 等待3分钟

其实只花了 1+5+3+1 = 10分钟

其中还有双核都等待了3分钟

双核 异步 非并行

核1  举杠铃100下(10)分钟

核2  准备烧开水 1分钟+ 准备洗衣服 1分钟+ 等待5 分钟+ + 关掉烧水机 1分钟  + 等待 1 分钟 + 关掉洗衣机 1分钟

其实只花了 1+5+3+1 = 10分钟

多线程的做法

单核下

线程1  准备烧开水 1分钟, 等开水烧开 8 分钟 , 关掉烧水机 1分钟

线程2  举杠铃100下  10分钟

线程3  准备洗衣服 1分钟, 等开水烧开 5 分钟 , 关掉洗衣机 1分钟

cpu 可能这么切换 最理想的切换方式

线程1  准备烧开水1  sleep  1          sleep 5            sleep 1          sleep 2          关开水 1分钟 exit

线程2    sleep 1      sleep  1            举杠铃50 5分钟    sleep 1          举杠铃20 2分钟  sleep1      举杠铃30下 3分钟

线程3    sleep  1      准备洗衣服1 分钟    sleep 5            关洗衣机1分钟    exit

最后使用了  14分钟  和异步是一样的。

但是实际上是不一样的,因为线程不会按照我们设想的去跑, 如果线程2 举杠铃先跑,整个流程的速度就下来了。

异步和同步的区别,  在io等待的时候,同步不会切走,浪费了时间。

如果都是独占cpu 的业务, 比如举杠铃的业务, 在单核情况下 多线和单线 没有区别。

多线程的好处,比较容易的实现了 异步切换的思想, 因为异步的程序很难写的。多线程本身程还是以同步完成,但是应该说

比效率是比不上异步的。 而且多线很容易写, 相对效率也高。

多核的好处,就是可以同时做事情, 这个和单核完全不一样的。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

原文地址:https://www.cnblogs.com/skinchqqhah/p/10351606.html

时间: 2024-10-08 11:04:31

线程与进程的区别以及对多线程并发的理解的相关文章

iOS线程和进程的区别和联系

线程和进程的区别主要在于它们是不同的操作系统资源管理方式.进程有独立的地址空间,一个进程崩溃后,在保护模式的影响下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径.线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等同于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些.但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程. 线程是CPU独立运行和独立调度的基本单位(可以理解为一个进程中执行的代码

线程与进程极其区别

1.进程和线程 1.1 概述: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行. 相对进程而言,线程是一个更加接近于执

iOS_线程和进程的区别与联系

呼~明天有一家面试,不知道为啥,有点小紧张... 首先是线程和进程的联系: 线程和进程都是由操作系统所负责的程序运行的基本单元,系统利用该基本单元实现对应用的并发性. 接下来就是线程和进程的区别: 线程和进程最大的区别就是它们是操作系统的两种资源管理方式,进程有独立的地址空间,一个进程奔溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同的执行路线,线程有自己的堆栈和局部变量,但是线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但

线程与进程的区别以及联系

在操作系统中,线程与进程是非常重要的概念,深刻地理解它们很有必要.那么,什么是线程,什么是进程呢?它们之间又有什么区别什么联系呢? 进程是具有独立功能的程序关于某个数据集合的一次运行活动,可以申请和运行资源,是系统资源分配和调度的最小单位.一个程序可以对应一个或多个进程,一个进程可以对应一个程序或一段程序.进程由程序(描述进程要完成的功能).数据集合(程序在执行时所需要的数据和工作区).PCB控制块(包含进程的描述信息和控制信息,进程存在的唯一标志)组成,在进程创建时,创建PCB,进程结束时,撤

线程与进程的区别

线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 (3)线程是处理器调度的基本单位,但进程不是. 4)二者均可并发执行. 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性.进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有

操作系统(10 线程和进程的区别 --非法操作)

1.并发执行:多进程和多线程. 2.  apache 和 iis 对比(多进程和多线程的之间区别) apache 是多进程实现的,iis是多线程实现的. 区别: 1>效率上:线程效率比进程效率高. 2>稳定性:线程和进程比,线程不稳定,一个线程出现问题,多个线程一起出现问题.而进程是独立的,有自己独立的空间. 3>安全性:进程是隔离的,单独的.线程之间可以互相访问 3.平时会遇到一些非法操作,非法操作的原理是? 因为操作系统分为两个态,用户只能存在于用户态,不能越界到内核态.只要用户越界

线程和进程的区别(详细)

1.线程的基本概念 概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行. 好处 :(1)易于调度. (2)提高并发性.通过线程可方便有效地实现并发性.进程可创建多个线程来执行同一程序的不同部分. (3)开销少.创建线程比创建进程要快,所需开销很少.. (4)利于充分发挥多处

线程间的通信方式以及线程与进程的区别

1.锁机制     1.1 互斥锁:提供了以排它方式阻止数据结构被并发修改的方法.     1.2 读写锁:允许多个线程同时读共享数据,而对写操作互斥.     1.3 条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止.对条件测试是在互斥锁的保护下进行的.条件变量始终与互斥锁一起使用.2.信号量机制:包括无名线程信号量与有名线程信号量3.信号机制:类似于进程间的信号处理.线程间通信的主要目的是用于线程同步,所以线程没有象进程通信中用于数据交换的通信机制. 进程和线程的区别?定义:进程

C语言中线程和进程的区别

线程是指进程内的一个执行单元也是进程内的可调度的实体,与进程的区别 1) 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 2) 并发性:不仅进程之间可以并发执行,同一个进程之间的多个线程可以并发执行 3) 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但是可以访问隶属于进程的资源 4)系统开销: 在创建或撤销进程时,由于系统都要之分配和回收资源,导致系统的开销明显大于创建或撤销线程时的开销