书上和别人也总是说“进程是资源分配的单位、线程是系统调度的单位”,重复一遍一遍又一遍,听的耳朵都起茧了。但有没有想过为什么?
去年有个小伙伴分享了下进程栈和线程栈,我从中似乎找到了答案。
他讲到linux内核会检查该内存地址是否属于该进程,也就是进程地址空间相隔离,各有各的区域,而同进程内的线程之间可没有这个检查,所以线程之间有可能彼此踩到彼此的地址——突然灵光闪动,这也许就是说“进程是资源分配的单位”——因为地址空间的隔离单位是进程,进程间有地址隔离机制。
说线程是调度单位,这个好理解,linux内核不区分进程线程的反正它们都是struct task结构体。只不过进程是一组task,这个task链表的leader是主线程,其他是普通线程,该进程的所有线程共享地址空间,只是在主线程的task的时候分配这些资源,所以说线程是轻量级进程的原因也是在这。而linux内核调度器只认task,所以说线程是调度单位也好理解。
版权声明:本文为yhb1206原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。