浅谈多线程
目录
多线程一词可以解释为多个控制线程或多个控制流。虽然传统的UNIX进程包含单个控制线程,但多线程(multithreading,MT)会将一个进程分成许多执行线程,其中每个线程都可独立运行。
-
多线程的益处
- 提高应用程序的响应
- 更有效地使用多处理器
- 改进程序结构
- 占用较少的系统资源
- 提高应用程序的响应
-
提高应用程序的响应
可以对任何一个包含许多相互独立的活动的程序进行重新设计,以便将每个活动定义为一个线程。例如,多线程GUI的用户不必等待一个活动完成即可启动另一个活动。
-
有效使用多处理器
通常,要求并发线程的应用程序无需考虑可用处理器的数量。使用额外的处理器可以明显提高应用程序的性能。
具有高度并行性的数值算法和数值应用程序(如矩阵乘法)在多处理器上通过多个线程实现时,运行速度会快得多。
-
改进程序结构
许多应用程序都以更有效的方式构造为多个独立或半独立的执行单元,而非整块的单
个线程。多线程程序比单线程程序更能适应用户需求的变化。
-
占用较少的系统资源
如果两个或多个进程通过共享内存访问公用数据,则使用这些进程的程序可以实现对多个线程的控制。但是,每个进程都有一个完整的地址空间和操作环境状态。每个进程用于创建和维护大量状态信息的成本,与一个线程相比,无论是在时间上还是空间上代价都更高。此外,进程间所固有的独立性使得程序员需要花费很多精力来处理不同进程间线程的通信或者同步这些线程的操作。
使用pthread_create(3C)可以向当前进程中添加新的受控线程:
int pthread_create(pthread_t *tid, const pthread_attr_t *tattr,
void*(*start_routine)(void *), void *arg);
#include <pthread.h>
pthread_attr_t() tattr;
pthread_t tid;
extern void *start_routine(void *arg);
void *arg;
int ret;
/* default behavior*/
ret = pthread_create(&tid, NULL, start_routine, arg);
/* initialized with default attributes */
ret = pthread_attr_init(&tattr);
/* default behavior specified*/
ret = pthread_create(&tid, &tattr, start_routine, arg);