我只是学习多线程编程,但这里的问题是一个非常基本的概念需要首先澄清。
当我从互联网上搜索时,我理解的是重量级是关于“进程”,轻量级映射到“线程”。但是,为什么流程是重量级的呢?因为不共享内存或其他什么?
答案 0 :(得分:4)
“重量级”并发是每个并发执行程序启动和/或开销很大的地方。
“轻量级”并发是每个并发执行程序启动成本低廉和/或开销很小的地方。
管理OS的进程通常比线程更昂贵,因为每个进程都需要一个独立的地址空间和各种管理结构,而进程中的线程共享这些结构。
因此,流程被认为是重量级的,而线程则是轻量级的。
但是,在某些情况下,线程被认为是重量级的,而“轻量级”并发工具是某种“任务”。在这些上下文中,运行时通常会在线程池上执行这些任务,在阻塞时挂起它们,并将线程重用于其他任务。
答案 1 :(得分:1)
如今,“重型”分类不再具有与以往相同的重量,而工艺分离的优势却没有丧失其效力; - )
这完全归功于写时复制语义;在fork()
期间,不再盲目地为父进程复制父进程中的页面。这两个进程都可以使用共享内存进行操作,直到子进程开始写入其中一个共享内存页面。
当然,创建更多进程更容易受到操作系统的限制,因为进程ID比线程更有限。