linux下进程和线程的区别和联系
进程用fork()或者vfork()生成(vfork是专门为了加载其他程序的子程序而优化的,随着fork()的优化,vfork已经被优化)
fork()生成的子进程与父进程共享代码区内存,对于其他内存
fork()之后常常伴随着 exec(), 这会用新程序替换进程的代码段,并重新初始化其 数据段、堆段和栈段。大部分现代 UNIX 实现(包括 Linux)采用两种技术来避免这种浪费。
1. 内核(Kernel)将每一进程的代码段标记为只读,从而使进程无法修改自身代码。这 样,父、子进程可共享同一代码段。系统调用 fork()在为子进程创建代码段时,其所 构建的一系列进程级页表项(page-table entries)均指向与父进程相同的物理内存页帧。
2.对于父进程数据段、堆段和栈段中的各页,内核采用写时复制(copy-on-write)技术 来处理。([Bach, 1986]和[Bovert & Cersati, 2005]描述了写时复制的实现。)最初,内核 做了一些设置,令这些段的页表项指向与父进程相同的物理内存页,并将这些页面自 身标记为只读。调用 fork()之后,内核会捕获所有父进程或子进程针对这些页面的修 改企图,并为将要修改的(about-to-be-modified)页面创建拷贝。系统将新的页面拷 贝分配给遭内核捕获的进程,还会对子进程的相应页表项做适当调整。从这一刻起,父、子进程可以分别修改各自的页拷贝,不再相互影响。图 24-3 展示了写时复制技术。
类似于 fork(),vfork()可以为调用进程创建一个新的子进程。然而,vfork()是为子进程立 即执行 exec()的程序而专门设计的。
vfork()因为如下两个特性而更具效率,这也是其与 fork()的区别所在。
1. 无需为子进程复制虚拟内存页或页表。相反,子进程共享父进程的内存,直至其成功 执行了 exec()或是调用_exit()退出。
2. 在子进程调用 exec()或_exit()之前,将暂停执行父进程。 这两点还另有深意:由于子进程使用父进程的内存,因此子进程对数据段、堆或栈的任 何改变将在父进程恢复执行时为其所见。此外,如果子进程在 vfork()与后续的 exec()或_exit() 之间执行了函数返回,这同样会影响到父进程。
vfork()的语义在于执行该调用后,系统将保证子进程先于父进程获得调度以使用 CPU。
线程:
类似于 fork()和 vfork(),Linux 特有的系统调用 clone()也能创建一个新进程。与前两者不 同的是,后者在进程创建期间对步骤的控制更为精准。clone()主要用于线程库的实现。由于 clone()有损于程序的可移植性,故而应避免在应用程序中直接使用。
大体上说来,fork()相当于仅设置 flags 为 SIGCHLD 的 clone()调用,而 vfork()则对应于设 置如下 flags 的 clone():
CLONE_VM | CLONE_VFORK | SIGCHLD
linux下进程和线程的区别和联系的更多相关文章
- Linux下进程与线程的区别及查询方法
在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢?一.深入理解进程和线程的区别 1)两者概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进 ...
- [转] linux 下 进程和线程的区别
1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...
- [进程管理]linux 下 进程和线程的区别(baidu 面试)
进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是CPU调度和分派的 ...
- linux 下 进程和线程的区别
1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...
- Linux下进程与线程的区别
https://www.cnblogs.com/fah936861121/articles/8043187.html https://my.oschina.net/cnyinlinux/blog/36 ...
- linux查看进程的线程数
top -H -p $PID #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...
- Linux进程与线程的区别
进程与线程的区别,早已经成为了经典问题.自线程概念诞生起,关于这个问题的讨论就没有停止过.无论是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.一般程序员而言,搞清楚二者的概念, ...
- Linux中进程与线程的概念以及区别
linux进程与线程的区别,早已成为IT界经常讨论但热度不减的话题.无论你是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.对于一般的程序员,搞清楚二者的概念并在工作中学会运用是 ...
- 【Linux】程序、进程和线程的区别
程序.进程和线程的区别 程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行.进程则是运行着的程序,是操作系统执行的基本单位.线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位. ...
- linux下进程的最大线程数、进程最大数、进程打开的文件数
linux下进程的最大线程数.进程最大数.进程打开的文件数 ===========最大线程数============== linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_TH ...
随机推荐
- Vue框架:7、Node环境搭建,Vue-cli,es6导出、导入语法,跨域问题解决方法,小练习
前端开发之Vue框架 一.Node环境搭建 什么是Node或NodeJS: node js是一门后端语言 JavaScript只能运行在浏览器中,因为浏览器中有他的解释器环境 基于谷歌浏览器的v8引擎 ...
- JZOJ 2483. 【GDKOI 2021提高组DAY1】回文(palindrome)
题目 求区间最长回文串长度 \(1 \le n\le 5 \times 10^5\) 题解 比较妙的做法,主要是在询问部分 预处理出以某位为中心回文半径长 \(p_i\),马拉车和二分+哈希均可 然后 ...
- Diffusers中基于Stable Diffusion的哪些图像操作
目录 辅助函数 Text-To-Image Image-To-Image In-painting Upscale Instruct-Pix2Pix 基于Stable Diffusion的哪些图像操作们 ...
- echarts饼图中间添加文字
加到option配置里 title: { text: "2673682", left: "center", top: "50%", text ...
- PostgreSQL 按拼音排序 - convert to GBK/EUC_CN coding
背景 国内的应用,在文本排序上基本都是按照拼音来进行排序的. 在不同的字符集中,汉字的编码可能不一样,比如UTF8和GBK,其中GBK是按拼音的顺序进行编码的,而UTF8则不是. 所以如果你的数据库使 ...
- JAVA快速获取网络图片或者URL图片并保存到本地
JAVA快速获取网络图片或者URL图片并保存到本地,直接上代码: package com.xh.service;import org.springframework.stereotype.Servic ...
- channel 死锁
死锁: - 单个协程永久阻塞 - 两个或两个以上的协程执行过程中,由于竞争资源或由于彼此通信而造成的一种阻塞的现象. channel 死锁场景: - 非缓存channel只写不读 - 非缓存chann ...
- java学习日记20230227-java学习方法/转义字符/注释
Java学习方法 学习java基本原理和基本语法 快速入门(基本程序 CRUD) 研究技术的注意事项,使用细节,使用规范,如何优化 JAVA转义字符 \t : 一个制表位,实现对齐的功能 \n:换行符 ...
- CentOS 7.6 部署zabbix 6.0 支持Kubernetes
# 基础信息 系统版本: CentOS Linux release 7.6.1810 (Core) 内核版本: 4.19.0-9.el7.ucloud.x86_64 # 听说最新版的zabbix6.0 ...
- Clion 配置QT环境设置的注意事项
众所周知,jetbrain家的产品用起来相当不错,clion作为专用的c/c++语言编辑工具,能够舒服很多,尤其是代码提示功能以及格式化代码的功能.最近入了Qt的坑,准备学一些简单的界面开发,但是Qt ...