线程是程序执行时的最小单位,即CPU调度和分派的基本单位,一个进程可以由多个线程组成,同一个进程中的多个线程之间共享此进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。
1.线程有独立的堆栈段,共享地址空间,开销较小,切换速度较快。
2.线程间的通信机制比较方便。
3.因为操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。线程使CPU系统更加有效。
4.线程改善了程序结构,避免了一些嵌套循环。
1.当多线程访问同一全局变量的时候,一定要加互斥量,也就是上锁。当然最后不要忘记了解锁。
2.正确处理线程结束的问题:因为一个线程的终止,线程的资源不会随线程的终止释放,我们需要调用pthread_join() 来获得另一个线程的终止状态并且释放该线程所占的资源。
地址空间:同进程中的线程共享此进程的地址空间,而进程之间则是独立的地址空间,是隔离的。
资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
健壮性:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
线程是处理器调度的基本单位,但是进程不是。
线程与进程的共同点:两者均可并发执行。
-线程执行开销小,但是不利于资源的管理和保护。
-进程执行开销大,但是能够很好的进行资源管理和保护。
例如:g++ ?-o main filename.cpp ?-lpthread。
原文:https://www.cnblogs.com/xzj8023tp/p/11280907.html