多线程编程

来源:互联网 发布:php与thinkphp 编辑:程序博客网 时间:2024/05/16 14:16

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系统调用。

 

 

原创粉丝点击