进程和线程
进程拥有资源,包括:内存空间中的代码、数据等;I/O 资源;打开文件;CPU等。
线程执行任务,线程只拥有CPU和少量寄存器,线程之间共享进程的资源。
为什么需要线程
进程切换开销大,主要包括:
- CPU的上下文切换:保存和恢复相关寄存器的内容
- 进程相关的数据结构切换:页表、文件描述符、消息队列等.
线程切换只需要切换CPU上下文、不需要改变地址空间切换页表等。
线程优缺点
优点
- 切换快
- 共享内存,通信方便
缺点
- 一个线程出错,进程终止。
- 共享内存有并发问题。
线程的独占资源
- 一组寄存器
- 栈,每个线程有独立的栈
- 错误返回码
- 信号屏蔽码,每个线程感兴趣的信号不同
线程底层
clone (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, 0);
共享地址空间、文件系统信息、打开文件、信号处理函数及被阻断信号。