1、 线程和进程的区别是什么?
答:
进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。
线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道执行路径,他们共享一个进程的资源。
线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源。
2、 pthread_exit和exit的区别什么?
答:
当初始线程从main()调用返回时或调用exit()时,整个进程及其所有的线程都将中止。在其他线程调用exit()也会中止整个进程
如果主线程仅仅调用了pthread_exit,则仅主线程本身中止,进程及进程内的其他线程将继续存在。所有线程都已中止时,进程也将中止。
3、线程的继承性是什么?
答:
子线程继承主线程的属性。进程中的所有信息对该进程的所有线程都是共享的:可执行的程序文本,程序的全局内存,堆内存,栈,文件描述符;信号的处理是进程中所有线程共享的。(如果信号的默认处理是中止该进程,那么即使把信号传给某个线程也一样会将进程杀掉)。
4、多进程与多线程的优劣是什么?
答:
多线程比多进程成本低,但性能更低
多线程优点:无需跨进程边界;程序逻辑和控制方式简单;所有线程可以直接共享内存和变量等。缺点:每个线程与主程序共用地址空间,受制于GB地址空间,线程之间的同步与加锁控制比较麻烦;一个线程的崩溃可能影响整个程序的稳定性;到达一定的线程数程度后,即便再增加CPU也无法提高性能。
多进程优点:每个进程独立,不影响主程序的稳定性;通过增加CPU,就可以扩充性能;可以尽量减少线程加锁/解锁的影响,极大提高性能。缺点:逻辑控制复杂,需要和主程序交互;需要跨进程边界;调度开销比较大
5、多线程开发有哪些应用?
答:
多线程应用很广泛:
(1)不阻断主线程,实现即时响应,由后台线程完成特定操作
(2)多个线程完成同类任务,提高并发性能
(3)一个任务有多个独立的步骤,多个线程并发执行各子任务,提高任务处理效率
6、如何来标识一个线程?
答:
表示进程号的为pid_t类型,表示线程号的是pthread_t类型; pthread_t是一个结构体而不是整型;
使用pthread_equal确定两个线程号是否相等;
使用pthread_self函数来获取线程的ID;
7、最小的能独立运行的基本单位是什么
答:
线程是进程的一个实体,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位,一个进程可以包含多个线程
8、线程与进程的区别是什么
答:
地址空间和其他资源:进程间相互独立,同一进程的各线程相互之间共享,某进程内的线程在其他进程不可见;
通信:进程间通信IPC,线程间可以直接读写进程数据段来进行通信。
调度和切换:线程上下文切换比进程上下文切换要快得多
在多线程OS中,进程不是一个可执行的实体
9、如何解决线程的死锁
答:
死锁就是当一个或多个进程都在等待系统资源,而资源本身又被占用时,所产生的一种状态;
死锁的产生是必须要满足一些特定条件的:互斥条件;请求和保持条件;不剥夺条件;循环等待条件;
要预防和避免死锁的发生,只需将上面的4个条件破坏掉其中之一即可。
10、线程是如何创建和退出的?
答:
创建线程使用pthread_create函数。在线程创建以后,就开始运行相关的线程函数。
线程退出时使用函数pthread_exit,是线程的主动行为。注意进程退出时使用exit函数,线程中用pthread_exit替代exit。
由于一个进程中的多个线程共享数据段,因此通常在线程退出后,退出线程所占用的资源并不会随线程结束而释放。所有需要pthread_join函数来等待线程结束,类似于wait系统调用。