当前位置: 首页 > 科技观察

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

时间:2023-03-20 19:37:39 科技观察

一、线程和进程的区别先简单说一下线程和进程的概念:(1)进程是指运行在内存中的应用程序,比如在Windows系统中,一个运行的exe就是一个进程。(2)线程是指进程中的一个执行流程。区别:一个程序至少有一个进程,一个进程至少有一个线程。一个应用程序可以同时启动多个进程。例如,对于一个IE浏览器程序,每打开一个IE浏览器窗口,就会启动一个新的进程。线程是指进程中的一个执行过程。一个进程可以有多个线程,每个线程执行不同的任务。当一个进程中的多个线程同时运行时,这种运行方式称为并发运行。.此外,线程和进程还有一个很重要的区别:每个进程在执行过程中都有独立的内存单元,而同一个进程中的多个线程共享内存,大大提高了程序的运行效率。二、对多线程并发的理解多线程并发只是表面上和感知上的并发,并不是本质上的并发。一个线程要运行,就必须占用CPU,而我们目前使用的计算机大多是单CPU的,所以一次最多只能有一个线程获得CPU并运行。多线程的本质是“最大限度地利用CPU资源”。当某个线程不需要占用CPU而只需要处理I/O等资源时,其他线程就有机会获得CPU资源。这有点类似于“协调法”,比如让你打扫屋子,让你烧水。要想在最短的时间内做好这两件事,一定要先想到把水烧开,闲着等水烧开。中间清洗房子,而不是先清洗再烧水,或者先烧开再清洗。在这个例子中,你是唯一的CPU,烧水和清洗是两个线程。虽然只有一个CPU,但是却频繁的在多个线程之间切换。当切换的频率足够高的时候,我们感觉所有的线程都在同时运行,所以我们感觉这多个线程是并发的。所以,并发并不是真的指多个线程同时运行,它只是描述一种现象。就像说有些人是“铁人”一样,只是用来形容一个人不怕苦,不怕累,像“铁人”一样。1.并发:在操作系统中,是指几个程序在启动、运行和运行结束之间的一段时间内,这些程序都运行在同一个处理器上。并发关系中的两种是同步和互斥。2、互斥:进程之间使用临界资源时相互排斥的现象称为互斥。3、同步:进程之间的关系不是关键资源的互斥关系,而是相互依赖的关系。进一步解释:前一个过程的输出作为后一个过程的输入。当第一个进程没有输出时,第二个进程必须等待。一组具有同步关系的并发进程相互发送的信息称为消息或事件。其中,有伪并发和真并发之分。伪并发是指单核处理器的并发,真并发是指多核处理器的并发。4、并行性:在单处理器多程序设计系统中,进程交替执行,表现出并发的外在特征;在多处理器系统中,进程不仅可以交替执行,还可以重叠执行。多个处理器上的程序可以并行处理。可见并行是针对多处理器的。并行是指多个并发事件同时发生,有并发的意思,但并发不一定是并行的,也就是说并发事件不一定非要同时发生。5、多线程:多线程是编程的一个逻辑层概念,是在一个进程中并发运行的一段代码。多线程可以实现线程间的切换执行。6.异步:异步和同步是相对的。同步就是顺序执行。执行完一个之后,还需要等待下一个,并进行协调。异步就是相互独立,在等待一个事件的同时继续做自己的事情,而不是等事件完成了再工作。线程是实现异步的一种方式。异步是指调用方法的主线程不需要同步等待另一个线程的完成,这样主线程就可以做其他事情了。异步和多线程不是对等的关系,异步才是最终目的,而多线程只是我们实现异步的一种手段。异步是当调用请求发送给被调用者,调用者可以做其他事情而不用等待返回结果。实现异步可以采用多线程技术,也可以交给另外一个进程处理。为了更好地理解以上概念,举个简单的例子,假设我要做三件事:烧水、举杠铃100次、洗衣服。烧开水,我要做的就是,准备烧水1分钟,等开水烧开8分钟,关掉热水器1分钟,举杠铃100次10分钟,举杠铃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分钟,关闭洗衣机cpu1分钟,这可能是最理想的switch模式线程1准备烧水1睡1睡5睡1睡2关开水1分钟退出线程2睡眠1睡眠1举杠铃505分钟睡眠1举杠铃202分钟睡眠1举杠铃303分钟线程3睡眠1准备洗衣服,睡1分钟,关洗衣机1分钟,退出***并使用14分钟,和异步一样。但实际上不一样,因为线程并不会像我们想象的那样运行。如果线程2举起杠铃先跑起来,整个过程的速度就会变慢。异步和同步的区别,io在等待的时候,同步不会切掉,浪费时间。如果都是独占CPU的业务,比如举杠铃的业务,在单核的情况下,多线和单线没有区别。多线程的好处是更容易实现异步切换的思想,因为异步程序很难写。多线程本身还是同步完成的,但是应该说效率不如异步。而且多行好写,相对效率也高。多核的好处就是可以同时做一些事情,这一点和单核是完全不同的。