进程,线程,并发,并行,同步,异步_多线程是并行还是并发[通俗易懂]

进程,线程,并发,并行,同步,异步_多线程是并行还是并发[通俗易懂]目录进程和线程什么是进程什么是线程进程和线程的联系并发并行线程切换线程切换的特点线程开销高并发通过多线程实现并发/并行异步同步异步与多线程的关系异步操作的优缺点多线程的优缺点适用范围进程和线程什么是

目录

进程和线程

什么是进程

什么是线程

进程和线程的联系

并发

并行

线程切换

线程切换的特点

线程开销

 高并发

通过多线程实现并发/并行

异步

同步

异步与多线程的关系

异步操作的优缺点

多线程的优缺点

适用范围


进程和线程

什么是进程

 

进程就是应用程序的运行实例,是操作系统进行资源分配(包括cpu、内存、磁盘IO等)的最小单位。(也就是我们的应用程序)

什么是线程

线程是CPU调度和分配的基本单位(可以理解为CPU只能看到线程)。

进程和线程的联系

进程可能有多个子任务,比如聊天工具要接受消息,发送消息,这些子任务就是线程。

并发

当多个线程在操作的时候,如果系统只有一个CPU,同一时刻就只有一条线程指令在执行,但是各个线程指令被快速的轮换执行,这就是的宏观上看起来是多个线程在同时执行。但微观上并不是这样,只是将时间分成若干个片段,多个线程交替执行。

进程,线程,并发,并行,同步,异步_多线程是并行还是并发[通俗易懂]

如图系统只有1个CPU,线程就要通过竞争得到执行机会。谁得到CPU谁就执行。

并行

如果系统有1个以上的CPU,则系统的线程有可能非并发而是并行。当一个CPU执行一个线程时,另一个CPU也在执行另外的线程,两个线程互不争夺CPU资源,可以同时进行,这就称为并行。

进程,线程,并发,并行,同步,异步_多线程是并行还是并发[通俗易懂]

这就是和并发不同之处,同一时刻线程指令都在执行。

线程切换

上边说到,各个线程指令被快速的轮换执行,也就是线程之间的切换。这个动作我们称之为线程切换。在线程切换的时候每个线程都会对cpu的资源进行争夺。

线程切换的特点

(1)cpu给线程分配时间片(也就是分配给线程的时间),执行完时间片后会切 换都另一个线程。

(2) 切换之前会保存线程的状态,下次时间片再给这个线程时才能知道当前状态。

(3) 从保存线程A的状态再到切换到线程B时,重新加载线程B的状态的这个过程就叫上下文切换。

(4) 而上下切换时会消耗大量的cpu时间。

线程开销

在线程切换的过程中会消耗大量的cpu时间,这就是线程的开销,但是这只是线程开销里面的其中一项。如下是线程开销的所有内容:

(1)上下文切换消耗

(2)线程创建和消亡的开销

(3)线程需要保存维持线程本地栈,会消耗内存

 高并发

是指短时间内大量的访问和请求,例如双十一。想系统能够适应高并发状态,则需要全面优化优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……而多线程只是其中解决方法之一。

多线程在高并发问题中起到的作用是使计算机资源在每一时刻能达到最大利用率,不至于浪费计算机资源使其闲置。

通过多线程实现并发/并行

1.Thread类定义实现了多线程,通过多线程可以实现并发或者并行。

2.在CPU比较繁忙资源不足的时候,操作系统只为一个含有多线程的进程分配仅有的CPU资源,这些线程就会自己争夺时间片。这就是多线程实现并发,线程之间争夺CPU资源获得执行机会。

3.在CPU资源较足的时候,一个进程内的多线程,可以被分配到不同的CPU资源,这就是多线程实现并行。

4.至于多线程实现的究竟是并发还是并行?前面两点提到的说明这是都有可能的。因为多线程可能被分配到一个CPU内核执行,也可能被分配到不同的CPU资源中执行。然而这个过程是操作系统干的,不关我的事。所以我也不确定最后究竟是并发还是并行。

5.不管是并发还是并行,都提高了对CPU资源的利用率,最大限度的利用了CPU资源。

异步

进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的 说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个 进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。

同步

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

异步与多线程的关系

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

异步操作的优缺点

因为异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少共享变量的数量),减少了死锁的可能。当然异步操作也并非完美无暇。编写异步操作的复杂程度较高,程序主要使用回调方式进行处理,与普通人的思维方式有些初入,而且难以调试。

多线程的优缺点

多线程的优点很明显,线程中的处理程序依然是顺序执行,符合普通人的思维习惯,所以编程简单。但是多线程的缺点也同样明显,线程的使用(滥用)会给系统带来上下文切换的额外负担。并且线程间的共享变量可能造成死锁的出现。

适用范围

在了解了线程与异步操作各自的优缺点之后,我们可以来探讨一下线程和异步的合理用途。我认为:当需要执行I/O操作时,使用异步操作比使用线程+同步I/O操作更合适。I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.Net Remoting等跨进程的调用。

而线程的适用范围则是那种需要长时间CPU运算的场合,例如耗时较长的图形处理和算法执行。但是往往由于使用线程编程的简单和符合习惯,所以很多朋友往往会使用线程来执行耗时较长的I/O操作。这样在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作时就不合适了。

 

今天的文章进程,线程,并发,并行,同步,异步_多线程是并行还是并发[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/63045.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注