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