进程 VS 线程and多线程

进程 VS 线程and多线程,第1张

进程 VS 线程 ?

随便百度一搜,或许就可以搜出一大堆关于线程和进程的关系,比如,下图:

        当然,这个表格其实很长,关于线程和进程之间的关系还没有列完,相信读者看到这样一个长的表格也很难记住理解,我们及需要一个浅显易懂的解释

        进程和线程是两个比较容易混淆的概念,容易混淆的其中一个原因可能是我们觉得这两者之间的名字差不多,其实,他们两个都是 *** 作系统所要管理的对象,但实际上他们又是两个完全不同的东西,所以才产生了上表所示这么多的不同点,我们可以简单梳理一下:

        首先:一个程序下至少有一个进程,一个进程下至少有一个线程,当然一个进程下也可以有多个线程来增加程序的执行速度,在执行程序时,实际上是执行相应的一系列线程。进程是资源分配的最小单位,而线程是程序执行的最小单位。

        地址空间:进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;线程没有独立的地址空间,同一进程的线程共享本进程的地址空间。

        资源拥有:进程之间的资源是独立的;同一进程内的线程共享本进程的资源。

        执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

        系统开销:进程执行开销大,线程执行开销小。

        或许到这儿我们已经大概明白了线程和进程之间的区别,但在实际使用过程中,为了提升计算机的处理性能,我们都会使用多线程

        首先,我们来了解下多线程,这是百度百科上的官方解释,不过也容易理解。

单线程and多线程

        线程是系统对代码的执行进程,如果将系统当做一个员工,被安排执行某个任务的时候,他不会对任何其他的任务作出响应。只有当这个任务执行完毕,才可以重新给他分配任务。每一个程序都有一个主线程,负责执行程序必要的任务。

        当我们处理一个消耗大的任务(如上传或下载图片),如果让主线程执行这个任务,它会等到动作完成,才继续后面的代码。在这段时间之内,主线程处于“忙碌”状态,也就是无法执行任何其他功能。体现在界面上就是,用户的界面完全“卡死” 。

       多线程是指,将原本线性执行的任务分开成若干个子任务同步执行,这样做的优点是防止线程“堵塞”,增强用户体验和程序的效率。缺点是代码的复杂程度会大大提高,而且对于硬件的要求也相应地提高。

多线程有什么用 ?

        1)发挥多核CPU 的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4 核、8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上 就浪费了 50%, 在 4 核 CPU 上就浪费了 75%。单核 CPU 上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快, 看着像多个线程"同时"运行罢了。多核 CPU 上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU 的优势来,达到充分利用CPU 的目的

        2)防止阻塞从程序运行效率的角度来看,单核 CPU 不但不会发挥出多线程的优势,反而会因为在单核CPU 上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核 CPU 我们还是要应用多线程,就是为了防止阻塞。试想,如果单核 CPU 使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行

        3)便于建模,这是另外一个没有这么明显的优点了。假设有一个大的任务 A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务 A 分解成几个小任务,任务B、任务 C、任务 D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/737468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存