轻量级并发和重量级并发有什么区别?

时间:2012-06-11 07:31:20

标签: multithreading

我只是学习多线程编程,但这里的问题是一个非常基本的概念需要首先澄清。

当我从互联网上搜索时,我理解的是重量级是关于“进程”,轻量级映射到“线程”。但是,为什么流程是重量级的呢?因为不共享内存或其他什么?

2 个答案:

答案 0 :(得分:4)

“重量级”并发是每个并发执行程序启动和/或开销很大的地方。

“轻量级”并发是每个并发执行程序启动成本低廉和/或开销很小的地方。

管理OS的进程通常比线程更昂贵,因为每个进程都需要一个独立的地址空间和各种管理结构,而进程中的线程共享这些结构。

因此,流程被认为是重量级的,而线程则是轻量级的。

但是,在某些情况下,线程被认为是重量级的,而“轻量级”并发工具是某种“任务”。在这些上下文中,运行时通常会在线程池上执行这些任务,在阻塞时挂起它们,并将线程重用于其他任务。

答案 1 :(得分:1)

如今,“重型”分类不再具有与以往相同的重量,而工艺分离的优势却没有丧失其效力; - )

这完全归功于写时复制语义;在fork()期间,不再盲目地为父进程复制父进程中的页面。这两个进程都可以使用共享内存进行操作,直到子进程开始写入其中一个共享内存页面。

当然,创建更多进程更容易受到操作系统的限制,因为进程ID比线程更有限。