2016 - 2024

感恩一路有你

多核cpu处理任务是并发还是并行 在多核CPU下,同一进程下的多个线程可以并行运行吗?

浏览量:3789 时间:2023-06-30 10:44:27 作者:采采

在多核CPU下,同一进程下的多个线程可以并行运行吗?

CPU在某一时刻只能执行一个线程,但多线程并不是因为多核或者双核而被称为多线程。是因为当多个线程并行执行时,CPU会按照一定的线程调度算法频繁切换线程。当一个正在执行的线程需要IO操作或内存访问时,CPU可以完全放弃该线程,转而调度线程就绪队列上的其他线程,被放弃的线程将进入阻塞状态。IO操作或内存访问操作完成后,线程可以进入线程就绪队列。人们通常指的是多线程,因为CPU是按照一定的线程调度算法来切换线程的,所以在一段时间内,可以看到很多线程在并发执行。实际上,在某个时间点只有一个线程在运行。

多核心CPU在同一时刻真的能同时执行多个线程吗?多核心CPU是真正意义上的多个物理CPU吗?

与超线程CPU在逻辑上模拟双核不同,多核CPU可以独立执行一个线程,是真正的多物理CPU。

其次,如果你的程序中线程的数量小于CPU核的数量,并且系统中没有其他进程同时运行,那么这个程序的每个线程都会享有一个CPU。当同时运行的线程数大于CPU核数时,CPU会采用一定的调度算法,每隔一定时间将这些线程调入或调出CPU,以保证每个线程都能共享部分CPU时间,实现多线程并发。

cms和g1区别?

CMS收集器的目标是获得最短的恢复暂停时间。基于 "马克-清除 "算法,其操作过程如下:

1)初始标记2)同时标记3)重新标记4)同时清除

初始标记和重新标记这两个步骤仍然需要 "停止世界 "。初始标记只标记GC根可以直接关联的对象,容易阅读。并发标记阶段是为了追踪GC根,而重新标记阶段是为了纠正那些由于用户程序的继续运行而导致标记被移动的对象的标记记录。这一阶段的停顿时间一般比初始标记阶段稍长,但远短于并发标记。

优点:并发采集,暂停低。

缺点:

1)CMS收集器对CPU资源非常敏感。在并发阶段,虽然不会导致用户线程停止,但是会因为占用了部分线程而导致应用变慢,降低总吞吐量。

2)CMS收集器can t处理漂浮的垃圾,以及 "并发模式故障 "这可能会导致生成完整的GC。

3)CMS是由 "马克-清除 "算法,这就容易产生大量的空间碎片。当有太多的太空垃圾时,会给大型对象的分配带来很大的麻烦。经常会出现这样的情况,陈年还有很多空间,但是没有足够的连续空间来分配当前对象,所以不得不提前触发满GC。

2.G1收藏家

G1是服务器应用程序的垃圾收集器。G1有以下特点:

1.并行并发:G1可以充分利用CPU和多核环境的硬件优势,使用多个CPU(CPU或CPU核)来缩短stop-The-World暂停时间。其他一些收集器最初需要暂停java线程执行的GC动作,G1收集器仍然可以让Java程序以并发继续执行。

2.代收集(Generation collection ):虽然G1可以独立管理整个GC堆,而不需要其他收集器的合作,但它仍然保留了代的概念。它可以用不同的处理新创建的对象和在GC中存活了一段时间的旧对象,以获得更好的收集结果。

3.空间整合:不同于 "标记-清洁与保养G1 CMS算法是一个基于 "标记-清洁和保养算法。在本地,它是基于 "复制 "算法。

4.可预测的停顿:这是G1相对于CMS的另一大优势。减少停顿时间是G1和CMS共同关心的问题,但G1不仅可以追求低停顿,还可以建立一个可预测的停顿时间模型,让用户在一个长度为m毫秒的时间段内明确指定。

5、G1操作步骤:

1.初始标记;2.并发标记;3.最终标记;4.筛选和回收

以上步骤的操作流程与CMS有很多相似之处。

初始标记阶段只标记GC根可以直接关联的对象,并修改TAMS的值,这样当用户程序在下一阶段并发运行时,可以在正确可用的区域创建新的对象。这个阶段需要停止线程,但是需要的时间很短。

并发标记阶段是从GC根开始分析堆中对象的可达性,找出幸存的对象。这个阶段需要很长时间,但它可以与用户程序同时执行。

最后一个打标阶段是纠正打标记录中因用户程序在并行打标期间持续运行而发生变化的部分。虚拟机将这段时间的对象变化记录在线程记忆集日志中,记忆集日志的数据需要在最后的标记阶段合并到记忆集日志中。在最后的标记阶段,需要将记忆集日志的数据合并到记忆集中。这个阶段需要停止线程,但是可以并行执行。

最后,在筛选回收阶段,首先根据用户期望的GC暂停时间对每个区域的回收价值和成本进行排序制定回收计划。

线程 时间 CPU 收集器 GC

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。