一、为什么要使用线程
创建线程的主要原因和优势包括:
-
提高程序执行效率:
通过并行处理,线程可以在多核或多处理器系统上同时执行多个任务,从而显著提高程序的执行速度。这对于处理大量数据或进行复杂计算的应用程序尤为重要。 -
改善程序响应性:
在并发编程中,即使某些任务正在执行,其他任务也可以同时运行,从而提高了程序的响应性。这对于需要同时处理多个用户请求或任务的应用程序(如Web服务器)非常有用。 -
有效利用系统资源:
创建线程可以更有效地利用系统资源,如CPU和内存。通过并行处理,可以确保系统资源得到充分利用,从而提高整体性能。 -
简化编程模型:
在某些情况下,使用线程可以简化编程模型。例如,当需要同时执行多个独立任务时,将这些任务分配给不同的线程可能比使用单个线程并依赖复杂的异步编程模型更简单。 -
实现多任务处理:
线程允许程序同时执行多个任务,这对于需要同时处理多个操作的应用程序非常有用。例如,一个图形用户界面(GUI)应用程序可能需要同时处理用户输入、渲染图形和响应网络请求。 -
提高代码的可扩展性和可维护性:
通过将程序划分为多个线程,每个线程负责不同的任务或功能,可以提高代码的可扩展性和可维护性。这使得开发者能够更容易地添加新功能或修改现有功能,而不会对其他部分产生太大影响。
综上所述,创建线程是为了提高程序的执行效率、响应性、资源利用率以及简化编程模型,并实现多任务处理和提高代码的可扩展性和可维护性。
二、线程的概念
线程是进程中一个执行单元,也是分配CPU的基本单位
三、线程的运行方式
1. 并行(Parallelism)
并行指的是同时执行多个任务或操作。在并行计算中,多个处理器或多个核心同时执行不同的任务。并行处理的关键是同时性,即同一时刻有多个操作在运行。
- 优点:并行处理可以显著提高程序的执行速度,特别是在处理大量数据或进行复杂计算时。
- 应用:并行处理广泛应用于高性能计算、科学计算、大数据分析等领域。
2. 并发(Concurrency)
并发指的是在同一时间段内,多个任务或操作交替执行,但不一定是同时执行。在并发系统中,任务的执行是部分重叠的,每个任务在执行过程中可能会被暂停,以便其他任务可以执行。
- 优点:并发处理可以提高系统的响应性和吞吐量,使得系统能够同时处理多个用户的请求。
- 应用:并发处理在Web服务器、数据库管理系统、操作系统等领域有广泛应用。
四、线程的创建
Windows中创建线程的API CreateThread
HANDLE CreateThread(
[in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] SIZE_T dwStackSize,
[in] LPTHREAD_START_ROUTINE lpStartAddress,
[in, optional] __drv_aliasesMem LPVOID lpParameter,
[in] DWORD dwCreationFlags,
[out, optional] LPDWORD lpThreadId
);
五、应用 线程的案例
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
while(1){
printf("%d\n",++i);
Sleep(100);
}
return 0;
}
int main(){
HANDLE m_hThread = CreateThread(NULL, //线程的安全属性
0,// 线程栈 默认1MB
&ThreadProc, //线程函数
0, //要传递到线程函数中的参数lpParameter
0,//线程的创建标志 0 立即运行 CREATE_SUSPEND 挂起
0 //线程id
);
while(1)Sleep(100);
return 0;
}