什么是线程?
线程是操作系统能够进行运算调度的最小单位。 它被包含在进程之中,是进程中的实际运作单位。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
什么是多线程?
多线程是指:一个程序内部存在多个线程同时执行。
使用多线程的目的
提高资源使用效率,从而提高程序的运行效率。
多线程优势
-
发挥多处理器的强大能力
由于基本的调度单位是线程,如果程序中只有一个线程,那最多只能在一个处理器上运行。在多个处理器中只能使用1个处理器的资源;在单个处理器中有助于程序获得更高的吞吐率。 -
让并行处理场景更简单
如果程序中为每种类型的任务都分配一个专门的线程,将异步I/O以及资源等待等问题分离出来。通过使用线程,可以将复杂并且异步的工作流进一步分解为简单并且同步的工作流,每个工作流都在单独的线程中运行,并在特定同步位置进行交互。 -
简化异步事件的处理场景
服务器应用程序在接受来自多个远程客户端的socket连接请求时,如果为每个连接都分配各自的线程并使用同步I/O,那么就会降低此类程序的开发难度。 -
让用户界面响应更加灵敏
程序中将UI线程和工作线程区分,使用户界面不会出现“冻结”现象。
多线程风险
-
线程安全
多个线程的执行操作顺序是不可预测的,从而导致产生一些并不想要的结果。 -
活跃性问题
例如线程A等待线程B持有的资源,而线程B永远不释放该资源,那么线程A将永远等待下去。 -
性能问题
在多线程程序中,当线程调度起临时挂起活跃线程并转而运行另一个线程时,就会频繁出现上下文切换操作,这种操作将带来极大的开销:保存和恢复执行上下文问切换操作,丢失局部性,并且CPU时间将更多地花在线程调度而不是在线程运行上。
当线程共享数据时,必须使用同步机制,而这些机制往往会一直某些编译器优化操作,使内存缓冲区的数据无效,以及增加共享内存总线的同步流量。
所有这些因素都将带来额外的性能开销。
原文地址 https://blog.csdn.net/u013560890/article/details/89316487