一、线程的基本概念
实现多任务并发运行;
线程属于进程,一个进程种可以有多个线程,并且多个线程可以并发执行;
线程是一个轻量级的进程,多个线程运行在同一个进程空间里面,多个线程共享一个进程资源
二、优缺点
优点:占用系统的资源少,通信简单
缺点:调度没有进程方便, 对资源的操作不安全
三、线程与进程的区别
进程有独立的地址空间,线程没有单独的地址空间。(同一进程内的线程共享进程的地址空间)
四、为什么要引入线程
启动一个进程所花费的空间远远大于启动一个线程所花费的空间(30倍左右),而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间(>10倍)
维护进程对内核的消耗远远大于线程
线程间可以共享数据,更容易通信
五、进程VS线程
1)需要频繁创建销毁的优先用线程,因为对进程来说创建和销毁一个进程代价是很大的。
2)线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应。
3)强相关的处理用线程,弱相关的处理用进程;
什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。
一般的服务器需要完成如下任务:消息收发、消息处理。“消息收发”和“消息处理”就是弱相关的任务,而“消息处理”里面可能又分为“消息解码”、“业务处理”,这两个任务相对来说相关性就要强多了。因此“消息收发”和“消息处理”可以分进程设计,“消息解码”、“业务处理”可以分线程设计。
当然这种划分方式不是一成不变的,也可以根据实际情况进行调整。
4)因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;
5)需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。
6)如果线程和进程对当前的任务处理各有优缺点,使用你喜欢的,你熟悉的;
7)线程一死(非正常退出)全死;(所有的线程属于进程,当其中一个线程非正常死亡,整个进程结束,所以所有的线程都结束);