一、线程是什么?
线程是程序最基本的运行单位,真正运行的是进程中的线程。
线程是大多数操作系统支持的调度单位, 执行单元,某些系统不支持线程技术。
是允许应用程序并发执行多个任务的一种机制,同一程序中的所有线程均会独立执行相同程序。
共享同一份全局内存区域,其中包据初始化数据段、未初始化数据段以及堆内存段。
二、进程与线程的关系
- 一般情况下进程包含线程, 线程比进程更轻量(体积更小,开销更小)
- 线程是最小的调度单位,进程是最小的分配资源单位(主要指内存资源),进程也是一种调度单位。
- 在多线程模型中要避免进程退出,否则多线程也会终止, 因为进程是线程的容器
- 线程创建于进程中,于进程共享资源,线程用进程的内存资源,完成特定任务,如果在意内存开销 ,使用多线程技术是一个很好的选择
- 线程就是寄存器和栈 (线程可以占用时间片使用cpu,可以通过保存和回复处理器现场避免寄存器冲突, 所以线程是一个合格的调度单位)
- 进程创建过程中需要资源管理、而线程不涉及,而是共享(栈独自占用)
仅有计数器,少量寄存器和栈,其余堆,变量,指针,引用,文件等共享(传递效率高) - 线程能减少并发执行时间和空间开销:因为线程具有相问的地址空间,则切换时候不需要切换页表
三、种类
内核级线程
系统支持的线程,可以为其分配内核对象,与进程一样获取cpu
可以得到更多系统资源, 缩短任务完成时间,所有的线程资源分配,访问和切换都要系统干预,开销较大
用户级线程
系统无法识别用户级线程,无法将资源分发给普通线程
如果主线程sleep(0)了,根据就近原则可以给相邻线程资源
普通线程虽然无法被系统直接分发资源, 但是它可以使用cpu,只要主线程释放交换给他即可
用户线程是安装在进程用户空间的,所以完成线程切换或访问线程资源在用户空间即可完成,无需系统干预
混合型线程
可以为线程分配内核对象,得到更多的时间片,线程安装在用户层, 较少线程调度开销
混合型线程支持的系统比较少
总结
这就是我大概的理解,线程与进程都是很重要的知识点!