线程(thread)是在 共享内存空间 中并发的多道执行路径,它们共享一个进程资源,如文件描述符和信号处理。Linux的线程是针对POSIX线程,也就是pthread,Linux对它的支持最好。
线程是一个更接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序的基础上引入线程和进程是为了提高程序的并发度,从而提高程序的运行效率和响应时间。
也可以将线程和轻量级进程(LWP)视为同等,但LWP更恰当的解释为一个虚拟CPU或内核的线程。它可以帮助用户态线程实现一些特殊的功能。
Pthread是一种标准化模型,他把一个程序分成一组能够执行的任务。
一般,下列三种场合会使用Pthread线程:
- 在返回前 阻塞的I/O任务 能够使用一个线程处理I/O, 同时处理其他任务。
- 在有一个或多个任务受不确定性事件影响,比如网络通信的可获得性影响的场合,能够使用线程处理这些异步事件,同时执行正常的处理。
- 如果程序的某些功能比其他功能更重要,可以使用线程以保证所有功能都出现。但那些时间密集型的功能具有更高的优先级。
总结: 在检查程序中潜在的并行性时,也就是说在要找出
能够同时执行任务时使用Pthread.
Linux进程模型提供了执行多个进程的能力,已经可以进行并行或者并发编程。可是,线程能够让你对多个任务的控制度更好、使用资源更少,因为一个单一的资源,如全局变量,可以由多个线程共享。而且,在拥有多个处理器的系统上。多线程应该比用多个进程实现的应用的执行速度更快!
线程和进程在使用上各有优缺点:
- 线程执行开销小,但不利于资源的管理和保护;而进程正相反。
- 线程适合在对称多处理器的计算机上运行,而进程则可以跨机器迁移;
- 进程可以拥有资源,而线程共享进程拥有的资源;
- 进程的切换必须保存在进程控制块中(PCB,Process Control Block),同个进程的多个线程间的切换不用那么麻烦。
总结:
进程单独占有系统资源,进程的切换必须保存在进程控制块(PCB)中;线程共享进程的资源,(同个进程的)线程之间的切换不那么麻烦。
线程是一个
更接近于执行体的概念
,它可以
与同进程中的其他线程共享数据,但拥有自己的栈空间
,拥有独立的执行序列
。