你是不是也是进程与线程傻傻分不清?内存管理是不是搞得你焦头烂额?一个进程到底能够有多少个线程?不搞清楚誓不罢休!
一.进程与线程
进程:资源(CPU、内存)分配的基本单位。
线程:CPU调度和分配的基本单位。
以上概念似乎耳熟能详,实际到底啥意思却还不知所以然。
首先时进程四要素:
1.有一段程序供其执行,不一定专用,可以与其他进程共用。
2.有专用的内核堆栈空间。
3.在Linux内核中有进程控制块task_struct,供内核调度器识别并参与调度。
4.有独立的用户堆栈空间。
以下为Linux下一个进程所分配的虚拟内存空间:
Linux系统下为进程分配4G的虚拟内存大小,其中低字节3G内存为用户空间,高字节1G为内核空间。
内存空间主要有四大部分组成:.text(代码段)、.bss与.data的全局存储区、堆区和栈区。
在32为Linux系统下,栈区大小为一般10M,可通过命令 ulimit -s或者ulimit -a 可以查看默认栈大小,也可通过命令ulimit -s+参数,临时修改线程栈大小。
而堆的大小为剩余的用户内存空间,既堆的大小 < 3G -(环境变量+命令行参数+栈+共享库+.bss+.data+.text等)。在单线程下堆的空间远大于栈。